2017-10-03 18 views
9

5 milyon anahtar/değer çiftini saklamak için PHP uygulamam ile birlikte memcached kullanmayı düşünüyorum. Amacım, DB'den (benim durumumda dosya sistemi olan) ileri geri çekilmekten kaçınmaktır. Anahtar/değer çiftlerine saniyede 100-500 erişime sahip olabilirim. Anahtar değerleridir hem MD5 en ve formda şunlardır:Memnuniyet açısından iyi ya da kötü bir fikirde milyon anahtar-değer depolama?

array('MD5X' => 'MD5Y', ...) 

Ben verilerin depolandığı nasıl emin değilim, ama biz 5 million * 16 bytes (keys) + 5 million * 16 bytes (values) çarpın eğer ~ 180MB olsun.

:

veri kümesi sabittir

yüzden sadece ondan okuyacaktır (DÜZENLEME tüm öğeleri saklamak için 750MB kadar kullanabilirsiniz gerçek memcached örneği ile denedikten sonra.).

Sorular:

  1. bu iyi ya da kötü tasarım mı?
  2. Memcached'ı hiçbir zaman (sunucu çökmedikçe) verileri yeniden yüklemek zorunda kalabilir mi? Bellek kapağının saklanan verilerden daha yüksek olduğunu varsayarsak? Değilse, aynı hedefe ulaşmak için hangi teknikleri kullanabilirim?

Çok teşekkürler!

+0

Özel kullanım durumunuz için performans profili almalısınız. Ya da yerleşik bir önbelleğe sahip olacak gerçek bir DB kullanmayı düşünün. Tek bir diziyi saklarsanız, tüm diziyi içine bakmak zorunda kalmazsınız. –

+0

Teşekkürler @PaulCollingwood, maalesef bir DB kullanamıyorum. Alkışlar – JoeSlav

cevap

0

İhtiyacınız olan performansı alacak mısınız? Kesinlikle. Memcache hızlı yanıyor. Yaklaşık 10 milyon anahtar saklıyoruz ve memcache'ye yaklaşık 700 kez bir saniyede erişiyoruz. Bizi asla hayal kırıklığına uğratmadı.

Uygulamayı başlattığınızda memcache'deki tüm anahtarları yükleyebilir ve son kullanma tarihini çok uzun bir süre olarak ayarlayabilirsiniz. Hatırlaman gereken şey, memcache’in nihayetinde bir önbellek olmasıdır. Ve bir depolama motoru olarak kullanılmamalıdır. Gereksinim duyduğunuz verileri (anahtarı) bulmamanın ve bu durumda bir DB çağrısı yapmanın her zaman bir olasılık olduğunu düşünmek zorundasınız.

Cassandra gibi bir noSQL veritabanına bakabileceğiniz alternatif, ihtiyaçlarınızı karşılayan mükemmel okuma ve yazma hızlarına sahiptir. Tek şey memcache ile karşılaştırıldığında cassandra ince ayar yapmak biraz zor.

+0

Teşekkürler. Anlayışım gereği, bir son kullanma tarihini belirtmemek kaydıyla, bir anı ya da slab sorunum olmadığı sürece kayıtların hiçbir zaman geçmemesi gerekir. Geride bir DB (ve yeni kütüphaneler/etc tanıtmak istemiyorum) ve dosya sistemini kullanmak için yeterli disk alanım olmadığı için el ile yinelenen ve yüklenen humojen bir dizi kullanmayı düşünüyorum. sunucu başladıktan sonra memcached içine. Memcached içinde bir giriş bulunmazsa, başka bir davranışı varsayılan olarak kullanacağız VEYA diziden okuma yapmayı düşünebilir, ancak orada eşzamanlılıktan ve sunucuyu öldürmekten korkuyorum. – JoeSlav

İlgili konular