Merhaba sevgili e-bergi okuyucuları, internetin ve dinamik web sayfalarının yaygınlaşmasıyla programcıların fazlasıyla aşina olduğu veritabanlarının en başarılarından birini, MySQL'i duymayanınız pek azdır sanırım. Başarılı olmasının sebepleri arasında en önemlisi sağladığı performans ve esnekliktir.

MySQL'in performansını zaten yıllardır yapılan testlerden ve denemelerden biliyoruz. Bu yazımızda MySQL'in esnekliğini sağlayan önemli etmenlerden biri olan farklı "Tablo Türleri" (Table Types) ya da diğer bir tanımıyla "Depolama Motorları"ndan (Storage Engines) bahsedeceğiz.

MyISAM

MySQL'in varsayılan tablo türü olan MyISAM hızıyla ve taşınabilirliğiyle ün kazanmıştır. Tablolarda yapılan güncellemelerde tablo seviyesinde kilitleme (Table Level Locking) kullanır böylece tablolardaki güncellemelerin birbiriyle kesişmesi durumunda istenmeyen durumları önler. Ancak birim zamanda yapılan işlem sayısını azalttığı için bir dezavantaj olarak görülebilir. MyISAM'ın yine en önemli özelliklerinden biri "Full Text Indexing"dir (Tam Metin Dizinleme). Bu sayede büyük metinler içinde aramayı kolay ve hızlı bir şekilde gerçekleştirmeyi sağlar.

Transaction'ları (işlem kelimesi Türkçe karşılık olarak kullanılabilir) desteklememesi eksilerindendir. Eğer transaction'lar yazılım seviyesinde yapılamıyorsa MyISAM yerine InnoDB ya da BerkeleyDB kullanılması daha yerinde olacaktır. MyISAM'ın bir diğer eksisi ise tablolarda yapılan güncellemelerin tablonun diskte alan kaybettirmesidir. Bu yüzden belirli zaman aralıklarıyla "OPTIMIZE TABLE" komutu çalıştırılmalıdır. Bunların yanında veri bütünlüğünün korunmasını sağlayan "Foreign Key" (yabancı anahtar) bulunmaması MyISAM'ın eksilerindendir.

Eğer tablo üzerinde yapılacak işlem genellikle okuma ise, güncellemeler az miktarda yapılacak ve transactionlara ihtiyaç duyulmayacaksa MyISAM hızından dolayı en doğru seçim olacaktır.

InnoDB

MySQL kullananların muhtemelen en çok kullandıkları ikinci tablo türü InnoDB'dir. Hem transaction hem de foreign key desteğinin olması InnoDB'nin ikinciliğe sahip olmasını sağlayan ilk iki etmendir. Bunların yanında satır seviyesinde kilitleme(Row Level Locking) yapması bir tablodaki belirli bir satırda yapılan güncellemenin bütün tablonun kilitlenmesine sebebiyet vermemesini sağladığı için MyISAM'daki performans kaybı InnoDB'de yaşanmaz. InnoDB'nin bir artısı da büyük veriler üzerindeki işlemlerde performanslı olması ve aynı zamanda daha az işlemci (CPU) gücüyle çalışmasıdır.

MEMORY (HEAP)

Tablo türlerinin gerçek anlamda en hızlısı MEMORY türüdür ancak bu sizi yanıltmasın. HEAP türündeki tablolar RAM'de tutulduğu için herhangi bir güç kesintisinde bu tablolardaki bütün veriler kaybolacaktır. MySQL tarafından geçici tablolar için kullanılan bu tablo türü belirli bir boyutu aşarsa otomatik olarak MyISAM türüne çeviriliyor. Eğer sınırları düzgün belirlenmemişse sunucudaki bütün hafızanın kullanılmasına sebep olabilirler.

MySQL'in de yaptığı gibi geçici tablolara ihtiyacınız varsa MEMORY türü sizin için biçilmiş kaftandır.

MERGE (MRG_MyISAM)

Bu tablo türü ilginçlik sıralamasında ikinci sırada geliyor. MERGE tablo türü, aynı yapıya sahip tabloların verilerini beraber tutan bir tablo türüdür. Genellikle birbiriyle yakından alakalı veriler tutan tabloların hepsine birden erişmek için kullanılır. İkinci kullanım alanı da fazla miktarda veri içeren tabloları birden fazla tabloya bölerek performans artışını sağlamaktır. MERGE türündeki bir tablodan yapılan bir okuma işlemi birden fazla tablo üzerinde paralel olarak çalışacağı için belirli bir hız artışı sağlayacaktır.

FEDERATED

En ilginç tablo türü olarak seçtiğim FEDERATED tablo türü bir tablonun başka bir tablonun kopyası olmasını sağlar. Bu iki tabloda yapılan herhangi bir değişiklik aynı zamanda diğer tabloya da uygulanır. FEDERATED tabloların referans gösterdiği tablolar hem kendi bulundukları sunucuda hem de başka uzak bir sunucuda olabilir. Bu sayede bir sunucu üzerinde veri kaybı olması durumunda başka bir sunucuda bulunan FEDERATED tablodan kaybolan veriler tamamlanabilir.

Evet sevgili e-bergi okuyucuları bir yazımızın daha sonuna gelmiş bulunuyoruz, dilerim ki veritabanlarınız hep beklediğinizden hızlı ve veri bütünlüğünüz hep istediğinizden sağlam olur.

Bizimle, e-bergiyle kalın...