pillinetwork hesabınızla giriş yapın.

MySQL İle Memcache Kullanımı

Bilindiği gibi Php ile Memcache kullanılarak veritabanı üzerinden çok fazla yük alınabiliyor. Ayrıca Memcache’nin dağılabilir yapısı bize birçok kolaylık sağlayabiliyor. Örneğin çoklu web sunucularında tek bir Memcache ile veri paylaşımı yapılabiliyor veya çoklu Memcache sunucuları kullanılarak daha sağlam bir cache yapısı kurulabiliyor. Memcache’nin kullanımında başka bir kolaylık sağlayabilecek şey ise MySQL’den direk Memcache’ye erişebilmek, veri okuyup saklayabilmek. Bu yazıda bu işlemin nasıl olduğunu ve kendi yaptığım çeşitli performans testlerini anlatacağım.

Bu işlem yapılırken MySQL’in udf yapısı kullanılıyor. MySQL için Memcache modülünü derleyip, bu modüldeki fonksiyonları oluşturmamız gerekiyor.

http://tangent.org/586/Memcached_Functions_for_MySQL.html
http://tangent.org/552/libmemcached.html

Bu adreslerde bulunan udf eklentisi ile Memcache fonksiyonları kullanılabilir hale geliyor.

Kullanılabilecek Fonksiyonlar:

memc_servers_set()
memc_servers_behavior_set()
memc_set()
memc_get()
memc_append()
memc_prepend()
memc_delete()

Bu fonksiyonları,

CREATE FUNCTION memc_servers_set RETURNS INT SONAME "libmemcached_functions_mysql.so";

şeklinde tanımlayıp kullanabiliyoruz. Bu şekilde MySQL queryleri ile Memcache’ye veri yazabiliyoruz ve okuyabiliyoruz. Bunun sağlayacağı kolaylıklar yapılan işe göre çok çeşitli olabilir.

Ben bu tanımlamaları yaptıktan sonra uygulama aşamasında biraz fikir vermesi için çeşitli hız testleri yaptım.

Bu testleri yaparken 10.000 kayıtlı bir tablo oluşturdum ve bu tablodaki kayıtları Memcache’ye aktardım.

select memc_set(isim, deger) from table1;

10.000 kaydın aktarımı yaklaşık 3 saniye sürüyor. Bu şekilde Memcache’ten bir veri çektiğimizde ise 0 saniyelik bir işlemle sonuç dönüyor.

select memc_get('isim3');

Sonuç:
Bu işlemin bir artısı trigger kullanılarak bazı işlemlerin MySQL’e yaptırılıp, Memcache’ye veri girilebilmesi. Bu sayede kod tarafında bir işlem yapılmadan, örneğin herhangi bir veri girişinden sonra, bu veri Memcache üzerinde saklanabilir ve programdan direk okutulabilir. Tabi burada verileri MySQL’den Memcache’e yazıp, sonra okumayı yine MySQL üzerinden yapmak performans açısından sorun yaratacaktır. Yaptığım testlerde, MySQL üzerinden Memcache kullanımı hız açısından çok iyi sonuçlar vermese de uygulanacağı yere gore değişik tipte kullanımlarla çok fazla kolaylık sağlayabilir.

Spacer
Spacer
/* Etiketler: , , */
/* umutbesler yazdı. 11 Kasım 2008 22:59. 5 yorum var */
önceki yazı
fibonacci kod yazarsa!

Yorumlar

Bildiğim kadarıyla bu konuda zaten çekme işlemini MySQL den değil ilk önce memcache den deniyoruz. Artıyı bu şekilde sağlıyor, otomatik cache oluşturması yönünden bir artısı oluyordu. Select sorgularında trigger ile sonuçları memcache e atmakta sonrasında SQL sorgularını memcache den alarak, Write et işlemlerini MySQL e bıraktığımızdan herhangi bir değişiklikte örneğin o SQL cache ini etkileyen bir update yada insert gönderdiğimizde cache in MySQL tarafından dirty olarak işaretlenebileceği yönünde artısı olması lazım. Yoksa eğer MySQL imiz çok kötü config edilmediyse dediğin gibi MySQL e bağlanıp MySQL in cache'inden okuyup bize vermesinin hız artışı değil hız götürüsü olacaktır.

eğer üçüncü parti cache mekanizmalarıyla uğraşmak değil, kendiniz birşeyler yapmak istiyorsanız. php'nin alnına siyah bandı takıp klavye başında sabahlayacak kod yazarlarına da çözümü var:


http://www.php.net/shmop (Shared Memory)

basit bir ayrıntı ama kayıtlarda bu ürünün adı memcached olarak geçiyor.

bilgilendirme için teşekkürler.

Memcached Deamon yani serverının adı, protocol adı olarak ise memcache protocol'u şeklinde geçmektedir. Yani her iki türlüsü de kullanılıyor.

Bu arada shared memory iyi güzeldir ama birden çok makinenin aynı ortak cache ortamını paylaşmasına ne yazıkki izin vermemekte ama TCP/IP ye göre çok daha hızlı olacağı kesindir. Her iki cache sistemininde avantajları farklı.

memcache sadece bir cache server görevi görüyor değil mi? yani fiziki olarak dosya yazdırmak yerine bir tür index li serverda tutuyor verileri?

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork