Merhaba arkadaşlar.
Merak ettiğim şey başlıkta da belirttiğim gibi veritabanı sorgularını dosyalarda önbelleklemenin hıza bir faydasının ya da zararının olup olmayacağı.
Şu anda bir veritabanı sınıfı yazmaya başladım, yazmakta olduğum sınıfa belki kullanırım diye önbellekleme sistemi koyacağım.
Yani $vt->sorgu("SELECT deger FROM tablo", $cache = true, $cachetur = 'dosya', $zaman = 180); şeklinde bir sorgu oluşturulduğunda sorgu şifrelenip bir dosyaya kaydedilecek ve 180 saniye boyunca dosyadan çekilecek. Zaman dolduğunda ise dosya yeniden oluşturulacak.
Mesela kullanım yeri için örnek veriyorum bir blog scripti yapıyoruz diyelim. Sidebarda "kategoriler" bölümü olur genelde. Sürekli olarak aynı kategoriler yer alacağı için oraya 2-3 haftalık bir önbellekleme süresi girdiğimizde o süre zarfında dosyadan çekilir, 2 hafta sonra yeniden db'ye bağlanıp tekrar önbellek dosyası oluşturur.
Sizce bu tarz bir önbellekleme performans kaybı yaşatır mı yoksa performans için olumlu mu olur?
Bu tarz şeyin bir çok sitede kullanıldığını biliyorum. Bir çok veritabanı sınıfının da buna olanak sağladığını da biliyorum. Ama bunu sorma sebebim veritabanında çok fazla veri olan sitelerde, veritabanından çekilecek veri içeriği de büyük olacağı için önbellek dosyasının boyutu da büyüyecektir. Zaten kullanılan hostlar ortak host olduğu için zamanla dosyalardan okumak veritabanından okumaktan daha zahmetli iş olur diye korkuyorum. Her hostta yüksek performanslı disk bulamıyoruz sonuçta.
Saygılar.
Sizce sql sorgularını dosyada önbelleklemek gerekli mi?
11
●1.492
- 23-02-2014, 20:11:03Üyeliği durduruldu
- 23-02-2014, 22:47:53Kimlik doğrulama veya yönetimden onay bekliyor.@prnrmlwbmstr; Düşünceniz gayet doğru şuanki yapılar artık filesystem önbellekleme yerine memcache, redis vb. önbellekleme yapılarını kullanıyorlar. @bknz: stash, doctrine, ezSQL
- 24-02-2014, 10:58:55Üyeliği durduruldu@saintx; Öncelikle cevabınız için teşekkürler.
Yapmakta olduğum sınıfa o memcache, xcache gibi önbellekleme türlerini ekleyeceğim. Merak ettiğim nokta dosya üzerinden önbelleklemenin zamanla yavaşlığa sebebiyet verip vermeyeceğiydi. Yani 1-2kblık önbelleklenmiş bir dosyanın okunması hızlı olacaktır, ama mesela bu önbellek dosyasına 5-10mb veri yazılırsa (o büyüklükte veritabanı sorguları olursa) zamanla yavaşlayacağından korktum. Sanırım her ihtimale karşı filecache özelliğini de eklemek gerekecek.
Tekrar teşekkürler. - 24-02-2014, 11:39:37dosya tabanlı yapman biraz sakıncalı olur. her hostun veri transfer hızı aynı değil (ucuz hostingler) bu sebeple yağmurdan kaçarken doluya yakalanabilirsin. o yüzden user tarafında cache tabanlı yapman daha mantıklı geliyor. @saintx'in dediği gibi memcache, redis vb. önbellekleme yapıları her zaman en iyi sonucu verir.
- 24-02-2014, 13:42:34benim bahsettiğin tarzda yaptığın bi class var şuanda aktif olarakta yaptığım projelerde kullanıyorum ben genelde çok ağır sorgularda kullanıyorum yani hesaplaması uzun sürecek cinsten olanlar için ne zaman ki mysql cpu kullanımı artar işte o zaman diğer sorgulara da uygularım örneği markalove.com da var sitenin hızına bakabilirsin nerdeyse tüm sogular diskteki cache üzerinden okuyor cpu kullanımından oldukça tasarruf ettik bu sayede site hızımızda arttı
sorguları dizeye çevirip serialize ederek bi cache dosyasına basıyorum daha sonra dosyayı okuyup unserialize ediyorum vs vs. bu arada altyapı codeigniter - 24-02-2014, 14:03:17@EmreBulutlar; bu dediklerini doctrine ilede yapabiliriz.
ezSQL + stash'de işimizi görür. disk cache yerine ram cache daha mantıklı bu yöndede redis işimizi fazlasıyla görecektir.
- 24-02-2014, 15:08:20ihtiyaç olduğu için böyle birşey yaptım bahsettiğin yapılardan benimde haberim var ama bu şekilde hem ram free hemde cpu free ekran resminden yapı hakkında az çok fikir sahibi olabilirsin ve cache sürekli güncel kalıyor bu sayedesaintx adlı üyeden alıntı: mesajı görüntüle