HEAP tablo tipi

MySQL’in çoğu zaman gözden kaçan tablo tipi HEAP’ten bahsedesim geldi bugün. HEAP tipi tabloların özelliği MySQL’in bu tipteki tabloların verilerini doğrudan RAM’de tutması. Dolayısıyla disk I/O’suna bağlı olmadığı için çok yüksek hızda cevap verebilen bir tablo tipi.

Ancak RAM’de olması nedeniyle veritabanı sunucusunun yeniden başlatılması durumunda tüm veri haliyle kayboluyor. Ayrıca çok fazla veri kaydedilmesi durumunda sunucunun RAM’ini doldurma ihtimali de mevcut. Peki bu iki büyük engele rağmen neden böyle bir tablo tipine ihtiyaç duyulmuş?

Ben HEAP tabloları iki yerde kullanıyorum:

  1. Session bilgisi
  2. Kullanıcı cache

Session bilgisi dediğim PHP’nin session altyapısı değil. Session tablosunda o an online olan kullanıcıları, bağlandıkları IP adresini ve ihtiyaç duyduğum bazı birkaç kişiye özel bilgiyi ve son aksiyon zamanını tutuyorum. Böylece hatta kaç kişi online, hangi IP adresiyle bağlı takip etme imkanım oluyor. Aslında bunun bir ileri seviyesi PHP’nin session bilgisini tamamen bir HEAP tabloda tutmak.

PHP’nin session bilgisini böyle bir tabloda tutmak özellikle birden fazla web sunucusu ile yayın yaptığınızda faydalı olacaktır zira session datasını dosya sisteminde tutarsanız kullanıcı round robin ya da benzeri altyapılarla farklı sunuculara yönlendirildiğinde session bilgisi kaybolacaktır.

Cache

İkinci kullanım alanı ise kullanıcı cache’i. FotoKritik’te kullanıcıların hesap durumlarını her bir request’te kontrol ettirmem gerekiyor. Çünkü online kişiler kural dışı bir hareket yaptıkları anda hesapları moderatörler tarafından geçici ya da kalıcı olarak askıya alınabiliyor.

Ayrıca kullanıcıya yeni site içi mesaj gitmiş mi gibi bilgileri de sürekli sorguluyorum. Bu sürekli sorguları hafıza yerine disk üzerinden yapmak, az hit almayan bir sitede 15.000 devirli RAID yapılmış disklerinizi bile gereksiz bir yük altına sokabilir….

Bu iki tabloyu birleştirmek de mümkün olabilir, ben tercih etmedim ama önemli olan bu tarz sürekli yapılan ve sunucunun yeniden başlatılması durumunda kolayca tekrar yaratılabilecek bilgileri HEAP tipi tablolarda tutmanın gerçekten ciddi performans kazanımları sağlayacağıdır.

HEAP tablonun aşırı RAM tüketmesini engellemek için, tablo yaratılırken maksimum satır sayısını baştan belirleyebiliyorsunuz, ve belirlemenizi şiddetle tavsiye ederim ;)

1 Yorum

  1. Merhaba, verdiğin bilgiler için teşekkür ederim.
    Benim sitemle ilgili bir problemim var ve çok uğraşmama rağmen bir türlü halledemedim.

    Aynı database üzerinde hem joomla hem de vbulletin kurulu. Günlük 3-4 bin civarında tekil kullanıcım var. Sürekli database hatası alıyorum. Host şirketiyle irtibata geçtim ve yapılacak tek şeyin cpsession süresini kısaltmak olduğunu söylediler. Çok araştırdım fakat bu işi nasıl yapacağımı öğrenemedim. Yardımcı olursan sevinirim.
    Sağlıcakla kal.

    Reply

Leave a Comment.