मैं उपलब्ध विकल्पों पर पढ़ने का एक बहुत कुछ कर रहा हूँ। मुझे उच्च प्रदर्शन MySQL 2 के संस्करण में भी हाथ मिला, जिसकी मैं अत्यधिक अनुशंसा करता हूं।
यह वही है जो मैंने एक साथ करने में कामयाब रहा है:
क्लस्टरिंग
सामान्य अर्थों में क्लस्टरिंग कई सर्वरों पर लोड वितरित कर रहा है जो एक सर्वर के रूप में एक बाहरी अनुप्रयोग को दिखाई देते हैं।
MySQL NDB क्लस्टर
MySQL NDB क्लस्टर एक डिस्ट्रिब्यूटेड, इन-मेमोरी, शेयर्ड-नॉन स्टोरेज इंजन के साथ सिंक्रोनस रेप्लीकेशन और ऑटोमैटिक डेटा पार्टिशनिंग है (एक्सक्यूज़ मी, मैं हाई परफॉर्मेंस बुक से शाब्दिक रूप से उधार लेता हूं, लेकिन उन्होंने इसे बहुत अच्छी तरह से रखा है)। यह कुछ अनुप्रयोगों के लिए एक उच्च प्रदर्शन समाधान हो सकता है, लेकिन वेब अनुप्रयोग आमतौर पर इस पर अच्छा काम नहीं करते हैं।
बड़ी समस्या यह है कि बहुत सरल प्रश्नों से परे (कि केवल एक तालिका को स्पर्श करें), क्लस्टर को आमतौर पर कई नोड्स पर डेटा की खोज करनी होगी, जिससे नेटवर्क विलंबता को कम करने और प्रश्नों के पूरा होने के समय को धीमा करने की अनुमति मिलती है। चूंकि एप्लिकेशन क्लस्टर को एक कंप्यूटर के रूप में मानता है, इसलिए यह यह नहीं बता सकता कि डेटा को किस नोड से प्राप्त करना है।
इसके अलावा, कई बड़े डेटाबेस के लिए इन-मेमोरी आवश्यकता व्यावहारिक नहीं है।
निरंतर सेक्विया
यह MySQL के लिए एक और क्लस्टरिंग समाधान है, जो MySQL सर्वर के शीर्ष पर एक मिडलवेयर के रूप में कार्य करता है। यह तुल्यकालिक प्रतिकृति, भार संतुलन और विफलता प्रदान करता है। यह यह भी सुनिश्चित करता है कि अनुरोधों को हमेशा नवीनतम प्रति से डेटा प्राप्त होता है, स्वचालित रूप से एक नोड का चयन होता है जिसमें ताजा डेटा होता है।
मैंने इस पर कुछ अच्छी बातें पढ़ी हैं , और कुल मिलाकर यह बहुत अच्छा लग रहा है।
फेडरेशन
फेडरेशन क्लस्टरिंग के समान है, इसलिए मैंने इसे यहां भी टॉगल किया। MySQL फेडरेशन स्टोरेज इंजन के माध्यम से फेडरेशन प्रदान करता है। NDB क्लस्टर समाधान के समान, यह केवल सरल प्रश्नों के साथ अच्छी तरह से काम करता है - लेकिन जटिल लोगों के लिए क्लस्टर भी बदतर है (चूंकि नेटवर्क विलंबता बहुत अधिक है)।
प्रतिकृति और लोड संतुलन
MySQL में विभिन्न सर्वरों पर डेटाबेस की प्रतिकृति बनाने की क्षमता है। इसका उपयोग कई चीजों के लिए किया जा सकता है - सर्वर, हॉट बैकअप के बीच लोड को विभाजित करना, टेस्ट सर्वर और फेलओवर बनाना।
प्रतिकृति के मूल सेटअप में एक मास्टर सर्वर हैंडलिंग शामिल है जो ज्यादातर लिखता है और एक या अधिक दास हैंडलिंग केवल पढ़ता है। एक और अधिक उन्नत भिन्नता मास्टर-मास्टर कॉन्फ़िगरेशन की है, जो एक ही समय में कई सर्वरों को लिखने के साथ-साथ लिखने के पैमाने की अनुमति देता है।
प्रत्येक कॉन्फ़िगरेशन में इसके पेशेवरों और विपक्ष हैं, लेकिन एक समस्या है कि वे सभी शेयर प्रतिकृति लैग हैं - चूंकि MySQL प्रतिकृति अतुल्यकालिक है, सभी नोड्स के पास हर समय सबसे ताज़ा डेटा नहीं होता है। इसके लिए एप्लिकेशन को प्रतिकृति के बारे में पता होना चाहिए और उम्मीद के मुताबिक काम करने के लिए प्रतिकृति-जागरूक प्रश्नों को शामिल करना चाहिए। कुछ अनुप्रयोगों के लिए यह एक समस्या नहीं हो सकती है, लेकिन अगर आपको हमेशा ताज़ी डेटा की ज़रूरत होती है तो चीजें कुछ जटिल हो सकती हैं।
प्रतिकृति को नोड्स के बीच लोड को विभाजित करने के लिए कुछ लोड संतुलन की आवश्यकता होती है। यह अनुप्रयोग कोड में कुछ संशोधनों के रूप में या समर्पित सॉफ्टवेयर और हार्डवेयर समाधानों का उपयोग करके सरल हो सकता है।
साझेदारी और विभाजन
साझाकरण आमतौर पर स्केल समाधानों के लिए दृष्टिकोण का उपयोग किया जाता है। आप डेटा को छोटे हिस्से में विभाजित करते हैं और उन्हें विभिन्न सर्वर नोड्स के आसपास फैलाते हैं। इसके लिए एप्लिकेशन को कुशलता से काम करने के लिए डेटा स्टोरेज में संशोधन के बारे में पता होना चाहिए, क्योंकि उसे यह पता होना चाहिए कि उसे कहां-कहां जानकारी की जरूरत है।
Hibernate Shards , Hibernate ORM (जो दुर्भाग्य से जावा में है। मैं PHP का उपयोग कर रहा हूँ) के विस्तार के साथ डेटा की सहायता से निपटने के लिए अमूर्त रूपरेखाएँ उपलब्ध हैं । HiveDB एक और ऐसा समाधान है जो शार्क के असंतुलन का भी समर्थन करता है।
अन्य
गूढ़ व्यक्ति
स्फिंक्स एक पूर्ण-पाठ खोज इंजन है, जिसका उपयोग परीक्षण खोजों से कहीं अधिक के लिए किया जा सकता है। कई प्रश्नों के लिए यह MySQL (विशेषकर ग्रुपिंग और सॉर्टिंग के लिए) की तुलना में बहुत तेज है, और परिणामों में समानांतर और दूरस्थ प्रणालियों को क्वेरी कर सकता है - जो इसे तेज करने के साथ उपयोग में बहुत उपयोगी बनाते हैं।
सामान्य स्फिंक्स में अन्य स्केलिंग समाधानों के साथ उपयोग किया जाना चाहिए ताकि उपलब्ध हार्डवेयर और बुनियादी ढांचे को अधिक प्राप्त किया जा सके। नकारात्मक पक्ष यह है कि फिर से आपको बुद्धिमानी से उपयोग करने के लिए स्फिंक्स के बारे में जानने के लिए एप्लिकेशन कोड की आवश्यकता होती है।
सारांश
स्केलिंग समाधान आवेदन की जरूरतों के आधार पर अलग-अलग होते हैं जिनकी इसे आवश्यकता होती है। हमारे लिए और अधिकांश वेब-अनुप्रयोगों के लिए, मेरा मानना है कि प्रतिकृति (शायद मल्टी-मास्टर) एक लोड बैलेंसर के साथ लोड को वितरित करने के लिए जाने का तरीका है। विशिष्ट समस्या क्षेत्रों (विशाल तालिकाओं) को साझा करना भी क्षैतिज रूप से बड़े पैमाने पर करने में सक्षम होना चाहिए।
मैं कंटीन्यू सीक्विया को एक शॉट भी देने जा रहा हूं और देख सकता हूं कि क्या यह वास्तव में वही कर सकता है क्योंकि इसमें एप्लीकेशन कोड में कम से कम बदलाव शामिल हैं।