Http://dev.mysql.com/doc/refman/5.1/en/memory-storage-engine.html पर सुविधा उपलब्धता सूची को देखते हुए दो संभावित समस्याएं सामने आती हैं:
- कोई लेन-देन या एफके समर्थन नहीं है, जिसका अर्थ है कि आपको अपने स्वयं के कोड में लेन-देन की अखंडता और संदर्भात्मक अखंडता का प्रबंधन करना होगा (जो कि डीबी को आपके लिए ऐसा करने की तुलना में बहुत कम कुशल हो सकता है, हालांकि यह आपके ऐप पर निर्भर करता है अपेक्षित व्यवहार पैटर्न)।
- तालिका स्तर केवल लॉकिंग: यह स्केलेबिलिटी के लिए एक महत्वपूर्ण अवरोधक हो सकता है यदि आपके ऐप को कई समवर्ती लेखकों को तालिकाओं के एक ही सेट या ऐसे मामलों की आवश्यकता होती है जहां आपके रीड ऑपरेशन लगातार डेटा को पढ़ने के लिए ताले का उपयोग करते हैं - ऐसे मामलों में एक डिस्क आधारित तालिका जो बहुत बेहतर लॉक लॉक ग्रैन्युलैरिटी का बेहतर समर्थन करता है यदि इसकी पर्याप्त सामग्री वर्तमान में रैम में कैश की जाती है।
इसके अलावा, यह मानते हुए कि आपके पास पर्याप्त रैम है, एक मेमोरी आधारित तालिका डिस्क आधारित एक से अधिक तेज होनी चाहिए। जाहिर है कि सर्वर के रीसेट होने पर क्या होता है, इस मुद्दे के समाधान के लिए आपको स्नैपशॉट को डिस्क में लेने की आवश्यकता होती है, जो कि समग्र रूप से प्रदर्शन लाभ को नकारने की संभावना है यदि डेटा को अक्सर कैप्चर करने की आवश्यकता होती है (यदि आप एक दिन खोने के साथ रह सकते हैं ऐसे उदाहरण में डेटा आप प्रति दिन एक बार बैकअप ले सकते हैं, लेकिन ज्यादातर मामलों में यह स्वीकार्य नहीं होगा)।
एक विकल्प हो सकता है:
- डिस्क आधारित तालिकाओं का उपयोग करें, लेकिन यह सुनिश्चित करें कि आपके पास किसी भी समय RAM में उन सभी को रखने के लिए पर्याप्त से अधिक RAM है (और "पर्याप्त RAM" आपके द्वारा मशीन, ओएस पर किसी भी अन्य प्रक्रियाओं को ध्यान में रखते हुए जितना आपको लगता है उससे अधिक हो सकता है) आईओ बफ़र्स / कैश और आगे)
- सामग्री को मेमोरी में प्रीलोड करने के लिए प्रत्येक स्टार्टअप पर तालिका की संपूर्ण सामग्री (सभी डेटा और इंडेक्स पेज) को स्कैन करें
SELECT * FROM <table> ORDER BY <pkey fields>
SELECT <indexed fields> FROM <table> ORDER BY <index fields>
प्रत्येक सूचकांक के लिए निम्नलिखित तालिका के
इस तरह आपका सारा डेटा रैम में है, आपको केवल लिखने के संचालन के लिए I / O प्रदर्शन के बारे में चिंता करनी होगी। यदि आपके ऐप का सामान्य कामकाजी सेट पूरे DB की तुलना में बहुत छोटा है (जो कि आमतौर पर ऐसा होता है - अधिकांश अनुप्रयोगों में अधिकांश उपयोगकर्ता केवल सबसे हाल के डेटा को देख रहे होंगे यदि समय हो तो) आप कितना अधिक होने के बारे में अधिक चयनात्मक हो सकते हैं। आप मेमोरी में प्रीलोड करने के लिए स्कैन करते हैं, बाकी को डिमांड पर डिस्क से लोड करने की अनुमति देता है।