Mysql’de Hangi Depolama Motorunu Kullanmalıyız Sorusuna En Net Cevap
Hangi Depolama Motorunu Kullanmalıyız Sorusuna En Net Cevabını aşağıdaki karşılaştırma ile açıklamaya çalıştık. Öncelikle unutmamak gerekir ki bu konu o kadar da kompleks bir sorun değildir.
Özetle söylemek gerekirse “Depolama Motoru” (Storage engine) veritabanınızda verilerin ne şekilde tutulacağını belirtmektedir.
MySql’de birçok depolama motoru bulunmaktadır. Fakat biz burada sadece 3 tanesine (MyIsam, InnoDb, Memory) depolama motorlarına değineceğiz. Çünkü bunlar en sık kullanılan ve hangisinin ne işe yaradığı en çok sorulan tiplerdir.
Bir MySql veritabanında her bir tabloya farklı depolama motorları tanımlanabiliyor. Böylelikle hangi tabloda hangi depolama motoruna ihtiyaç varsa ona göre değiştirebilirsiniz.
My ISAM | InnoDB | |
Tam Metin Arama (Full Text Searh) Özelliği Gerekli mi? | Evet | Hayır (5.6.4 versiyonundan itibaren mevcut) |
Transactions Gerekli mi? | Hayır | Evet |
Sıklıkla Select Sorguları mı Var? | Evet | |
Sıklıkla insert,update,delete Sorguları mı Var? | Hayır | Evet |
Satır Bazlı Kilitleme (Tek tabloda aynı anda çoklu işlemler) | Hayır | Evet |
İlişkisel Veritabanı Tasarımı | Hayır | Evet |
Yukarıdaki tabloyu özetlemek gerekirse, veritabanınızdaki ilgili tabloya sıklıkla veri girişi mi yapılıyor yoksa sıklıkla veri okuması mı yapılıyor.
Eğer sıklıkla veri girişi yapılıyor ise, örneğin log tutan bir tablo, ya da çok kullanıcının şubelerden veri girişi sıksa hem tablo yapısının sağlamlığı hem de performans açısından InnoDb tercih edilmeli. InnoDB verileri daha sağlıklı tutuluyor denilebilir.
Bir diğer fark ise satır bazlı kilitleme (Row Locking (multi processing on single table)) özelliğidir.
MyIsam tabloya veri girişi yapılırken tüm tabloyu kilitler, bu arada başka veri gelirse sıraya alır. InnoDb ise sadece ilgili satırı kilitler ve başka veriler gelirse hızlıca o verileri de işleme alır.
Sıklıkla select yapılan tabloda ise MyIsam kullanımı daha mantıklıdır. Insert, update, delete sorgularında MyIsam bir süre sonra kendisine ek yük oluşturmaktadır. Belirli aralıklarla optimizasyon yapılmaya ihtiyaç duyar. Select sorgularına ise MyIsam daha hızlı yanıt verebilmektedir.
Eğer, select ve insert işlemleri oldukça yoğun ve eşit oranda ise InnoDb kullanmanız daha mantıklı olacaktır. Zira yoğun işlemlerde InnoDB baaşrılı ve sağlıklı hizmet verecektir.
Bu iki veri tipini kıyaslamak için çok daha fazla kriter mevcuttur fakat burada açıkladıklarımız en temel ve gerekli kriterlerdir. İleri seviyelerde kendi kararlarınızı verebileceksiniz.
Memory depolama tipini de oldukça önemsiyoruz çünkü Memory depolama alanı en hızlı işlem yapılabilen motordur. Çünkü adı üstünde verileri sunucunun RAM’inde tutumaktadır. Avantajı diske direk erişim yapılmasına gerek olmadığından çok hızlıdır. Dezavantajı ise sunucu yeniden başlatıldığında, ya da mysql veritabanı restart edildiğinde memory tipinde ayarladığınız tablodaki tüm verilerin silinmesidir. Kullanım amacı ise hızlı ve sadece geçici kullanım için olmasıdır. Örneğin sürekli log tutan bir tablonuzu memory tipinde ayarlayıp belirli aralıklarla asıl tablonuza aktarabilirsiniz.
Sorularınızı bekliyoruz.
Bu makale yazılırken aşağıdaki kaynaklardan faydalanılmıştır.
http://developer99.blogspot.com.tr/2011/07/mysql-innodb-vs-myisam.html
http://www.koodla.com/2008/05/25/mysqlde-transaction-ve-php-ile-kullanimi/
No Comments