Paylaşılan Önbellek - Geçersiz Kılma En İyi Uygulaması


14

Önbellek nesnelerini geçersiz kılmak / güncellemek için daha iyi bir yaklaşımın ne olacağını bilmek istiyorum.

Ön şartlar

  • Uzaktan memcached sunucusuna sahip olmak (birden fazla uygulama için önbellek görevi gören)
  • Tüm sunucular azure tarafından barındırılıyor (yakın ilgi alanları, aynı veri merkezleri)
  • Önbellek nesnesi boyutu 200 bayt ile 50 kilobayt arasında değişir


Yaklaşım 1 (en kısa sürede önbellekte sakla)

  1. Nesne A oluşturulur -> veritabanında sakla ve önbellekte sakla
  2. İstemci tarafından talep edilen A nesnesi -> önbelleğin varlığını kontrol et, aksi takdirde veritabanından getir ve önbellekte sakla
  3. A nesnesi güncellenir -> veritabanında sakla, önbellekte sakla

Yaklaşım 1 daha açık görünüyor. Bir şey oluşturulursa, önbelleğe en kısa sürede koyun. Ne olursa olsun birisinin buna ihtiyacı olacak.


Yaklaşım 2 (tembel önbellek deposu)

  1. A nesnesi oluşturulur -> veritabanında sakla
  2. İstemci tarafından talep edilen A nesnesi -> önbelleğin varlığını kontrol et, aksi takdirde veritabanından getir ve önbellekte sakla
  3. A nesnesi güncellenir -> veritabanında depola, önbellekteki anahtarı sil

Yaklaşım 2 daha fazla bellek farkında gibi görünüyor. Bu yaklaşımda yalnızca istenen öğeler önbelleğe gider.


Soru 1: Performans göz önünde bulundurulduğunda, daha iyi bir yaklaşım ne olabilir? Bellek veya CPU henüz sayılmaz.

Soru 2: Düşüncelerim bir tür erken optimizasyon mu?

Soru 3: Başka düşünceniz var mı? Diğer yaklaşımlar?

Yanıtlar:


12
  1. Talep edilemez, ancak buna bağlı. Sizin durumunuzda hangi yaklaşımın en iyi olacağını belirleyecek birçok faktör vardır, örneğin: Oluşturulan nesnelerin, oluşturulduktan kısa bir süre sonra geri alınması normal midir? Güncellemelerin erişime oranı nedir?
  2. Yeniden. önbelleğe ihtiyacınız olduğuna karar verme: Veri olmadan optimizasyon yapıyorsanız evet, teknik olarak erken optimizasyon. Teknik olarak söylüyorum, çünkü deneyim / geleneksel bilgelik bir çeşit önbelleğe ihtiyacınız olacağını söyleyebilir. Yeniden. önbelleğin en iyi nasıl çalışacağına karar verme: evet, kesinlikle erken optimizasyon.
    • Optimizasyon genellikle en iyi / en uygun çözümü bulmakla ilgili değildir. Aşağıdaki gibi gitmelidir:
      1. Sistemdeki darboğazları bulun.
      2. En az iş ile en büyük farkı nerede bulabileceğinizi bulun.
      3. En az işi yapın!
      4. Henüz yeterince hızlı mı? Değilse, # 1'e gidin.
      5. Bitti!
    • Dürüst olmak gerekirse, tanımladığınız yaklaşımların hiçbiri karmaşık değildir. Neden her ikisini de uygulamıyor ve hangisinin en iyi olduğunu görmüyorsunuz?
    • Yaklaşım # 2'deki 3. adım, "Nesne A güncellenir -> veritabanında depola, girişi önbellekte güncelle" olarak değiştirilebilir.

Baqueta, cevabınız için teşekkürler. Bunu takdir ediyorum.
lurkerbelow

@lurkerbelow Yardım etmekten mutluluk duyarız.
vaughandroid

2

memcached nesneleri kendi ilkesi ile yönetir; önbelleğe alınmış nesnenin, kimse erişemezse veya memcached belleği yetersiz kalırsa süresi dolar. Bu nedenle, ilk yaklaşımınız iyi bir fikir değildir çünkü memcached'daki nesneniz, nesne oluştururken bellek yetersizliği nedeniyle geçersiz kalmaya devam edecektir.

S1. Yaklaşım 2, performans açısından daha iyi olurdu, çünkü performans artışı çok az olmasına rağmen, nesneyi memcached'a göndermez.

S2. Söylemesi zor. Darboğazı bildiğinizi varsayalım ve yaklaşımların erken olmayacağını düşünün.

Q3. Yalnızca memcached'da önbellek gibi başka yaklaşımlar da vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.