• 23-02-2014, 20:11:03
    #1
    Üyeliği durduruldu
    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.
  • 23-02-2014, 22:47:53
    #2
    Kimlik 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
    #3
    Ü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:37
    #4
    dosya 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, 12:08:37
    #5
    Yanlışım varsa arkadaşlar düzeltsin.

    memcache: RAM üzerinde önbellekleme yapıyor.
    filecache: Disk üzerinde önbellekleme yapıyor.

    Ram, disklerden çok daha hızlı olduğuna göre memcache kullanmak daha mantıklı.
  • 24-02-2014, 13:07:10
    #6
    @soulmy; rediste aynı tabanda çalışıyor. daha fazla fonksiyon için redis standart özellikleri istiyorsak memcache'i kullanabiliriz.
  • 24-02-2014, 13:42:34
    #7
    benim 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
    #8
    @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:20
    #9
    saintx adlı üyeden alıntı: mesajı görüntüle
    @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.
    ihtiyaç 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 sayede