Merhaba arkadaşlar,
Bu yazımızda mysql’de kullanılan tablo yapıları inceleyeceğiz. Mysql bildiğiniz üzere açık kaynak kod ile geliştirilen veritabanı yönetim sistemlerinden biridir. Ücretsiz olması ve trigger, view, procedures gibi yapısal özelliklere sahip olması gibi nedenlerden dolayı web tabanlı yazılımlarda kullanılan veritabanı yönetim sistemleri arasında şüphesiz birinci sırada yer almaktadır. Mysql’in gelişimi PHP’nin gelişimi ile eş güdümlü bir şekilde devam etmektedir.
Mysql’i güçlü ve popüler yapan nedenlerden biri de tablo yapılarıdır. Tablo yapılarının bir diğer adıda depolama motorudur. Mysql 5x sürümlerinde kullanabileceğimiz 7 adet tablo yapısı bulunmaktadır.
Mysql tablo yapıları
Projelerimizde doğru tablo yapısını kullanmak performans açısından son derece önemlidir. Bize hem hız kazandırır hemde profesyonellik katar. “Mysql çok büyük projelerde kullanılmaz” diye bir şehir efsanesinin olduğunu görmüşsünüzdür. Ben buna sadece gülüp geçiyorum. Mysql her türlü web projesinin üstesinden gelebilecek bir potansiyele sahiptir. Ülkemizde veritabanı tasarımının pek fazla önemsenmemesi, yanlış tablo yapılarının kullanılması sebebiyle bu efsanenin ortaya çıkmış olduğunu düşünüyorum. Kişisel düşüncelere fazla takılmadan konumuza dönecek olursak gelelim bu tablo yapılarından en popüler olanlarını açıklamaya 🙂
MyISAM
Tablo oluştururken hiç bir tablo yapısını seçmezsek eğer varsayılan olarak tablomuz MyISAM formatında olur. Basitçe Mysql’in varsayılan tablo formatıdır. MyISAM son derece hızlı insert işlemi yapar. Amma velakin eğer tabloda çok fazla veri varsa select işlemi son derece yavaş olur. MyISAM tablo yapısının yüksek veri bulunan tablolarda kullanılması uygun görülmez. Bu tablo yapısını daha çok site giriş çıkış loglarını tuttuğunuz tabloda ve buna benzer tablolarda kullanmanız doğru olur. MyISAM maksimum 4GB veri saklama kapasitesine sahiptir (Mysql 5.6x sürümlerde). Yapılandırma dosyanızdan bu ayarı değiştirebilirsiniz ancak bu boyutu büyüttüğümüz takdirde select işleminden veri elde etmemiz hayal olur 🙂
MyISAM kullanılan bir tabloda yapılan her update tablo yapısının sırasını bozar. Doğal olarak da her update sorgusu tablonun select performansını düşürmektedir. Bunun sebebi MyISAM yapısının mysql’de text formatında veri içermesi ve her update işleminin yeni bir veri girişi gibi algılanmasıdır. Şöyle açıklamak gerekirse: Bir tablo oluşturduğunuzda mysql içerisine otomatik olarak üç ayrı dosya oluşur. Örneğin xampp kullandığınızı varsayalım. Phpmyadmin’den deneme veritabanına logs adında bir tablo oluşturduk ve bu tablomuzun yapısını MyISAM olarak belirledik diyelim. C:\xampp\mysql\data\deneme klasörüne gittiğinizde burada logs.frm logs.myd ve logs.myi uzantılı dosyalar oluşur. Bu dosyaların görevlerini açıklayalım.
frm: Tablo yapısını içeren dosyadır.
MYD: Tablo verilerini barındıran dosyadır.
MYI: Tablo içinde bulunan index’leri barındıran dosyadır.
Bu dipnotları göz önünde bulundurursak MyISAM tablo yapısı kullandığımız tablolarda mümkün olduğu kadar update işleminden kaçınmamız gerekir.
InnoDB
Eğer daha büyük verilerle çalışıyorsanız MyISAM tablo yapısının yerine InnoDB yapısını kullanmamız daha mantıklıdır. InnoDB MyISAM tablo yapısından farklı olarak transaction yapı içerir. Bir tablonun yapısını InnoDB olarak seçtiğimiz takdirde mysql’de yukarıdaki gibi bir text formatı kullanılmaz.
InnoDB kullanan bir tablo üzerinde insert işlemi yapılırken mysql bu işlemi belirli bir sıraya göre yapar. Bu sıranın düzgün bir şekilde ilerlemesi ve veri kaybı yaşanmaması için üzerinde işlem yapılan tablo kilitlenir. Bu yüzden InnoDB yapısını kullanan tablolarda insert işlemi yaparken VALUES (1), (2), (3) şeklinde sorgu kullanmamız bize performans sağlar. Aksi takdirde yoğun trafiği olan projelerde aynı tablo üzerinde insert işlemi yaparken hatalar meydana gelmektedir.
InnoDB tabloları tamamen InnoDB motoru tarafından tutulmaktadır. InnoDB tablo yapısının update işleminin çok yapıldığı tablolarda kullanılması daha doğrudur. Eğer yoğun update işlemi yapılan tablolarda InnoDB yerine MyISAM yapısını seçerseniz her update işleminde tablo yapısı bozulacağı için düzenli aralıklarla optimizasyon ve onarım yapmanız gerekebilir.
Archive
Arşiv niteliği taşıyan verilerde kullanmamız gereken tablo yapısıdır. Archive yapısını kullanan tablolarda index kullanılmaz. Archive tablo yapısı zlib sıkıştırma algoritmasını kullandığından, kullanıcıdan alacağınız verileri bu tabloda saklayabilirsiniz. Archive tablo yapısı bazı durumlarda ve bazı sürümlerde MyISAM yada InnoDB gibi kurulu olarak gelmemektedir. Böyle bir durumda komut satırını açarak mysql durdurduktan sonra
-with-archive-storage-engine
komutunu yazmamız ve mysql’i yeniden başlatmamız yeterlidir.
MEMORY
Memory tablo yapısı verinin çok hızlı bir şekilde gelmesi gereken durumlarda kullanılır. Örneğin session bilgilerini veritabanında tutuyorsak tablo yapısını kesinlikle Memory olarak seçmemiz gerekir. Memory tablo yapısı diğer tablolardan farklı olarak veriyi RAM’de saklar. Fiziksel bellekle doğrudan bir bağlantısı olmadığı için hızlı bir şekilde çalışır. Bir tabloyu memory olarak belirlediğimiz zaman mysql’de .frm uzantısıyla bir dosya oluşturur.
Sırf hızlı diye memory yapısını her tabloda kullanmak doğru değildir. Çünkü memory yapısı veriyi RAM’de sakladığı için her yeni bir tablo RAM’de yeni bir alan oluşturacağından performans elde etmek isterken performans kaybederiz. Memory yapısıyla oluşturulan her tablo için RAM’de 16MB bir alan ayrılır. Bu boyutu göz önünde bulundurarak her tabloyu memory olarak belirlersek vay o mysql’in haline 🙂
NOT: Memory yapısını kullanan tablolar mysql yeniden başlatıldığında silinir.
CSV
Bu tablo yapısı çok sık kullanılmaz ancak metin dosyalarını veritabanımızda tutmak istediğimiz zaman şüphesiz en doğru tablo yapısıdır. Bu tablo yapımızda Archive yapısı gibi bazen kurulu olarak gelmemektedir. Kurulu olmadığı durumlarda yine komut satırını açıp mysql’i durdurduktan sonra
-with-csv-storage-engine
komutunu yazmamız yeterlidir.
Bir tablonun yapısını csv olarak belirlediğimizde mysql’de .csv uzantılı bir dosya oluşur ve veriler bu dosyada saklanır. Bu dosyayı excel ile de kullanabiliriz. Bu tablo yapısı başta dediğim gibi sık kullanılan bir yapı değildir ancak excel’den mysql’e yada mysql’den excel’e veri aktarmak istediğimiz zaman csv tablo yapısını kullanabiliriz der ve mysql tablo yapıları yazımızı burada bitiririm 🙂 Umarım faydalı olur arkadaşlar. Baya uzun bir yazı oldu hepinize iyi çalışmalar dilerim. Bir sonraki yazıda görüşmek üzere 🙂
İlk Yorumu Siz Yapın