Http://dev.mysql.com/doc/refman/5.1/en/memory-storage-engine.html adresindeki özellik kullanılabilirliği listesine bakarak iki olası sorun ortaya çıkıyor:
- Hiçbir işlem veya FK desteği yoktur, yani işlem bütünlüğünü ve kendi kodunuzdaki referans bütünlüğünü yönetmeniz gerekeceği anlamına gelir (bu, DB'nin bunu sizin için yapmasına izin vermekten çok daha az verimli olmasına neden olabilir). beklenen davranış kalıpları).
- Yalnızca tablo düzeyinde kilitleme: Uygulamanızın aynı tablo kümesine birden fazla eşzamanlı yazıcıya gereksinim duyması veya okuma işlemlerinin tutarlı verilerin okunmasını sağlamak için kilit kullanması durumunda - bu gibi durumlarda disk tabanlı bir tablo çok daha ince kilidi destekler. İçeriği şu anda RAM'de önbelleğe alınmışsa, ayrıntı düzeyi çok daha iyi sonuç verir.
Bunun dışında, yeterli RAM’iniz olduğunu varsayarsak, bellek tabanlı bir tablonun disk tabanlı olandan daha hızlı olması gerekir. Açıkçası, sunucu örneği sıfırlanırken ne olacağı sorununu gidermek için anlık görüntüleri diske çekmeyi hesaba katmanız gerekir; bu, verilerin sık sık yakalanması gerekiyorsa (eğer bir gününü kaybederek yaşayabilirseniz) genel olarak performans avantajını tamamen reddetme olasılığı yüksektir. Böyle bir durumda, verileri günde yalnızca bir kez yedekleyebilirsiniz, ancak çoğu durumda kabul edilemez.
Bir alternatif olabilir:
- Disk tabanlı tabloları kullanın, ancak herhangi bir zamanda hepsini RAM'de tutmak için yeterli RAM'in olduğundan emin olun (ve "yeterli RAM", makinenizdeki diğer işlemleri hesaba katmanız gerektiği gibi düşündüğünüzden daha fazla olabilir. IO tamponları / önbellek vb.
- İçeriği belleğe önceden yüklemek ve
SELECT * FROM <table> ORDER BY <pkey fields>
ardından SELECT <indexed fields> FROM <table> ORDER BY <index fields>
her dizin için her dizin için her başlangıçtaki tablonun tüm içeriğini (tüm veriler ve dizin sayfaları) tarayın
Bu şekilde tüm verileriniz RAM'dedir, yalnızca yazma işlemleri için G / Ç performansı konusunda endişelenmeniz gerekir. Uygulamanızın ortak çalışma kümesi tüm DB'den çok daha küçükse (genellikle durum budur - çoğu uygulamada çoğu kullanıcı yalnızca en son zamanlardaki verilere bakar), ne kadarının daha seçici olacağı konusunda daha iyi olabilirsiniz geri kalanı talep üzerine diskten yüklenmesine izin vererek belleğe önceden yüklemek için tarayın.