2013-10-11 4 views
5

का उपयोग करके टेराबाइट्स की बड़ी तालिका विभाजित करें मुझे क्षैतिज विभाजन पता है ... आप कई टेबल बना सकते हैं।MYSQL शेरिंग

मेरे पास seen है कि एक अनुप्रयोग आधारित शेरिंग में, आपके पास एकाधिक डेटाबेस सर्वर पर एक ही डेटाबेस संरचना होगी। लेकिन इसमें एक ही डेटा नहीं होगा।

उदाहरण के लिए

तो:

Users 1 - 10000: server A 
Users 10001 - 20000: server B 

तकनीक ठीकरा करने के लिए नियोजित MySQL-प्रॉक्सी कर रहे हैं, उदाहरण के लिए कुछ उपकरण (MySQL प्रॉक्सी के आधार पर) SpockProxy है। हम मैन्युअल रूप से भी shard कर सकते हैं। आवश्यक .. एक मास्टर तालिका, उदा .:

------------------- 
| userA | server1 | 
| userB | server2 | 
| userC | server1 | 
------------------- 

लेकिन इन ऊपर तकनीक आवेदन स्तर पर संभाल .. मैं डीबी सर्वर के स्तर पर इसे हल करना चाहते हैं होगा

हम पारदर्शी रूप से कई सर्वरों के साथ ऐसा कर सकते हैं? यह MySQL तालिका को स्केल करने की अनुमति देगा।

एक्स सर्वर पर एक्स टेबल बनाएं, और अंतिम उपयोगकर्ता को सामान्य क्वेरी द्वारा एकल डीबी सर्वर पर डेटा प्राप्त होता है?

संक्षेप में मैं एकल तालिका में 16 टेराबाइट का डेटा डालना चाहता हूं लेकिन मेरे पास एकल मशीन पर इतनी बड़ी जगह नहीं है, इसलिए मैं 8 टेराबाइट की प्रत्येक क्षमता को दो सर्वर स्थापित करना चाहता हूं। लेकिन एकल डीबी के लिए उपयोगकर्ता क्वेरी और बैकएंड पर परिणाम प्राप्त करने के दौरान शेडिंग का उपयोग किया जा सकता है।

मैं कुछ अन्य अच्छे समाधानों के लिए भी इस चर्चा को खोलता हूं उदा। MYSQL Clustering

क्या कोई भी समझाने की देखभाल करता है, या एक अच्छा शुरुआत करने वाला ट्यूटोरियल (चरण-दर-चरण) है जो आपको कई सर्वरों में विभाजन करने का तरीका सिखाता है?

+0

मेरे ज्ञान के लिए सभी sharding आवेदन स्तर पर किया जाता है। MySQL यह पारदर्शी रूप से नहीं करता है। – Namphibian

+0

@ नम्फिबियन इस समस्या का कोई अन्य समाधान है उदा। MySQL क्लस्टरिंग आदि .. – Imran

+0

आज इसे देखेंगे लेकिन आखिरी बार मैंने क्लस्टरिंग का उपयोग किया था, यह धीमा था और वास्तव में प्रयास के लायक नहीं था। – Namphibian

उत्तर

0

आगे बढ़ने से पहले आपको अपनी सोच को समायोजित करने की आवश्यकता है। मुझे नहीं लगता कि MySQL पर ऐसा करने का एक आसान तरीका है - मुझे यकीन है कि आप इसे कर सकते हैं यदि आप FEDERATED तालिका और विचारों का उपयोग करके प्रयास करते हैं, हालांकि, सर्वश्रेष्ठ पर शार्ड्स शेडिंग कभी आसान नहीं होता है।

हालांकि शेर्डिंग बहुत है। शार्डिंग टेबल लगभग हमेशा इसे देखने का गलत तरीका है। इसके बजाय आपको डेटा सेट को दाढ़ी करने की ज़रूरत है। ऐसा इसलिए है क्योंकि नोड्स में शामिल होना महंगा है।

तो मैं अत्यधिक इस पर ड्राइंग बोर्ड पर वापस जाने की सलाह देता हूं। यदि आपको वास्तव में शामिल होने की कोई आवश्यकता नहीं है, तो कैसंड्रा जैसे अन्य डीबीएस देखें जो इस तरह की चीज को बॉक्स से बाहर करते हैं। यदि आपको जुड़ने की ज़रूरत है, तो आपको वास्तव में अपने डेटाबेस में प्रत्येक तालिका को देखने और अच्छे विभाजन मानदंडों को खोजने की आवश्यकता है, फिर उस पर विभाजन करें ताकि आपके पास एक ही डीबी स्कीमा और फिर अलग-अलग शर्ड्स हों।

एक बार आपके पास यह जगह हो जाने के बाद आप रूटिंग प्रश्नों को उचित तरीके से संभालने के लिए अपने डेटाबेस के सामने एक प्रॉक्सी डाल दें। एक संभावना के रूप में https://github.com/flike/kingshard देखें (हालांकि एक अस्वीकरण के रूप में मैंने इनके साथ MySQL पर काम नहीं किया है)। प्रॉक्सी के साथ, आपको एक डीबी के अपने ऐप में उपस्थिति मिलती है और जैसा कि मैंने आपका प्रश्न पढ़ा है, वास्तव में आप जो लक्ष्य कर रहे हैं वह वास्तव में है।