2011-01-29 9 views
14

के लिए अधिकतम पंक्तियां क्या हैं नोट: मैंने यहां अन्य समान प्रश्नों की खोज की है, और अन्य उत्तर दिए गए प्रश्नों में से कोई भी दूरस्थ रूप से समान नहीं है .. इसके साथ ... मेरे पास MySQL के बारे में कोई प्रश्न है सारणी (अधिक सटीक, किसी तालिका से विशिष्ट फ़ील्ड पर- यानी tweets या updates)।MySQL तालिका

तो सवाल ... InnoDB तालिका पर अधिकतम पंक्तियां क्या हैं? यही कारण है कि माईसैम, इनो डीबी, और अन्य के बीच महत्वपूर्ण अंतर है, यदि सामान्य नहीं है, तो सामान्य रूप से। दूसरा, यदि तालिका वास्तव में बड़ी हो जाती है, तो डेटा को संग्रहीत करने के लिए सर्वोत्तम प्रथाएं क्या हैं- (एक ही तालिका, या विभाजित/एकाधिक तालिकाओं/डीबीएस)?

मैंने पढ़ा कि ट्विटर को दिन में 100 मिलियन ट्वीट्स मिलते हैं। उसी संदर्भ में, मेरा दूसरा प्रश्न ट्विटर जैसा कुछ कैसे लागू होगा?

उत्तर

14

http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html आपको अपने मुख्य आकार से प्रतिबंधों की गणना करने की अनुमति देगा।

लेकिन मैं विनम्रतापूर्वक सुझाव है कि आप रेफेरेंन्शिअल सत्यनिष्ठा और InnoDB की अन्य सुविधाओं के साथ एक लेन-देन संबंधी इंजन में ट्वीट्स तरह की जानकारी स्टोर करने के लिए नहीं करना चाहते हैं, और आप निश्चित रूप से उन सभी को एक तालिका के एक ही DB में संग्रहीत न करें उदाहरण। आप उन्हें बहुत सारे और गैर-एसक्यूएल डेटाबेस में डाल देते हैं जो आपको तेजी से जोड़ने की अनुमति देते हैं, और फिर मेटा-सूचना (जैसे हैशटैग, आरटी, इत्यादि) को एक अधिक जटिल डेटाबेस में निकालने की अनुमति देते हैं। ट्विटर डीबी आर्किटेक्चर पर प्रस्तुतियां Google के लिए आसान हैं (उदा। http://www.slideshare.net/nkallen/q-con-3770885)।

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

+0

अभी तक (2015 का अंत), MySQL प्रतीत होता है कि पोस्टग्रेज़ की तुलना में विभाजन के लिए बेहतर समर्थन है, और रेथिंक डीबी जैसे कुछ को नोस्कल समाधान के रूप में माना जाना चाहिए। – 9000

18

वहाँ एक पंक्ति सीमा नहीं है, लेकिन एक InnoDB डेटाबेस पर एक size limit:

न्यूनतम टेबल-स्पेस आकार 10MB है। अधिकतम टेबलस्पेस आकार चार अरब डेटाबेस पेज (64TB) है। यह भी तालिका के लिए अधिकतम आकार है।

आप कई फ़ाइलों में एक ही तालिका के कई विभाजनों में पंक्तियों को संग्रहीत करके horizontally partition अपनी तालिकाओं को हमेशा बना सकते हैं।

+0

मेरे अन्य प्रश्नों के बारे में क्या? :) धन्यवाद –

+0

@avon_verma: – ash

+0

अपडेट किया गया क्षैतिज विभाजन शेर्डिंग के रूप में reffered है? @ash – edam

1

64TB एक मेज के लिए सीमा निम्नलिखित अपवादों है:

  • कि innodb_page_size = 16K (डिफ़ॉल्ट) मान लिया गया है। इसे 4K और 64K के बीच 2 की शक्तियों पर सेट किया जा सकता है, जो तालमेल सीमा को आनुपातिक रूप से बदलता है।
  • PARTITIONed तालिका अनिवार्य रूप से एक साथ आयोजित 'सब-टेबल' का एक समूह है और एक बड़ी तालिका के रूप में कार्य कर रही है। विभाजन की संख्या पर पूर्व 5.6.7 सीमा 1024 थी। उसके बाद, यह 8192 रहा है। तो 64TB को गुणा करें।

ठीक है, जो आपको केवल बाइट सीमा देता है। इसके अलावा, इसमें ओवरहेड और इंडेक्स शामिल हैं। फिर आपको पंक्तियों की अधिकतम संख्या प्राप्त करने के लिए औसत रिकॉर्ड कितना बड़ा है, इस बारे में विभाजित करने की आवश्यकता है।

(यह औसत रिकॉर्ड आकार की गणना करने के लिए आसान नहीं है।)

सरल जवाब:

आप शायद आसानी से एक InnoDB तालिका में 1 खरब "छोटे" रिकॉर्ड मिल सकता है। कुछ प्रयासों के साथ, आपको 1000 ट्रिलियन मिल सकते हैं। लेकिन मुझे संदेह है कि डिस्क ड्राइव के लिए बजट इससे पहले समाप्त हो जाएगा। इसके अलावा, इसे भरने के लिए सभी INSERTs करने में सालों लगेंगे!

तो, यथार्थवादी उत्तर: MySQL पंक्तियों की 'असीमित' संख्या को संभाल सकता है।

वास्तविक जीवन? मैंने कुछ अरबों पंक्तियों के साथ कुछ अरब पंक्तियों के बारे में सुना है, यहां तक ​​कि 15 अरब तक।

मेरी Limits देखें, लेकिन यह पंक्तियों के प्रश्न पर अधिक नहीं कहता है।

+1

मेरी आखिरी नौकरी में, एक टेबल में 5+ अरब पंक्तियां थीं, और अभी भी तेजी से बढ़ रही थीं। यह एक डीडब्लू रिकॉर्डिंग थी जो हमारी सेवा 2007 से रखी गई हर फोन कॉल थी। हमने हाल के आंकड़ों के लिए दिन तक और पुराने डेटा के लिए रेंज विभाजन का उपयोग किया था। –