2009-08-08 4 views
5

डेटाबेस के साथ मेरा अनुभव काफी छोटे वेब अनुप्रयोगों के साथ है, लेकिन अब मैं पूरे राज्य के लिए मतदाता जानकारी के डेटासेट के साथ काम कर रहा हूं। लगभग 3.5 मीटर मतदाता हैं और मुझे उनके पते, मतदान इतिहास, आयु इत्यादि के आधार पर उन पर काफी रिपोर्टिंग करने की आवश्यकता होगी। वेब एप्लिकेशन स्वयं Django के साथ लिखा जाएगा, इसलिए मेरे पास डेटाबेस के कुछ विकल्प हैं MySQL और PostgreSQL।क्या MySQL 3.5 एम + पंक्तियों के साथ एक पठनीय डेटाबेस के लिए उपयुक्त है? यदि हां, तो कौन सा इंजन?

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

यदि MySQL नौकरी के लिए एक उपयुक्त उपकरण है, तो मैं यह भी जानना चाहूंगा कि यह InnoDB या MyISAM का उपयोग करने के लिए समझ में आता है या नहीं। मैं दोनों के बीच बुनियादी मतभेदों को समझता हूं, लेकिन कुछ सूत्रों का कहना है कि माईसाम का उपयोग गति के लिए करना है, लेकिन यदि आप "असली" डेटाबेस चाहते हैं, तो इनओडीबीबी, जबकि अन्य कहते हैं कि MySQL के सभी आधुनिक उपयोगों को इनो डीबी का उपयोग करना चाहिए।

धन्यवाद!

उत्तर

7

मैंने डीएसबी को mysql पर इससे कहीं बड़ा किया है- आपको ठीक होना चाहिए। बस अपनी अनुक्रमणिका को ध्यान से ट्यून करें।

इनो डीबी बेहतर लॉकिंग सेमेन्टिक्स का समर्थन करता है, इसलिए यदि कभी-कभी या लगातार लिखने वाले (या यदि आप बेहतर डेटा अखंडता चाहते हैं), तो मैं वहां से शुरू करने का सुझाव दूंगा, और फिर यदि आप अपने प्रदर्शन लक्ष्यों को नहीं मार सकते हैं तो बाद में myisam बेंचमार्किंग ।

+1

+1 - मेरी भावनाएं बिल्कुल। मैं अब तक माईसाम का उपयोग नहीं करता जब तक कि मेरे पास कोई विशिष्ट कारण न हो। यह बहुत सक्षम है, मैं बिना किसी समस्या के 20 मिलियन + रिकॉर्ड वाले टेबल के साथ काम करता था, लेकिन इनो डीबी की लेनदेन क्षमताओं में आमतौर पर किसी भी प्रदर्शन अंतर से अधिक होता है जब तक आप विशिष्ट प्रदर्शन समस्याओं का सामना नहीं करते हैं। – zombat

+0

धन्यवाद टिम! क्या मैं आपको "अपनी इंडेक्स को ध्यान से ट्यून करें" पर विस्तार करने के लिए कह सकता हूं? मुझे इंडेक्स का उद्देश्य मिलता है, लेकिन मुझे यकीन नहीं है कि ट्रेडऑफ क्या है - यानी सब कुछ इंडेक्स क्यों नहीं। मैं इंडेक्स को ट्यून करने का क्या मतलब है उससे थोड़ा उलझन में हूं - मैं उस छाप के नीचे था जिसे आपने एक कॉलम इंडेक्स करने का फैसला किया था या नहीं। –

+3

जब आप कोई अनुक्रमणिका बनाते हैं, तो आप आवेषण करते समय अतिरिक्त ओवरहेड जोड़ते हैं (अधिक नहीं, केवल थोड़ा, लेकिन यह जोड़ता है)। यदि आप सब कुछ सूचीबद्ध करते हैं, तो यह वास्तव में चीजों को धीमा कर सकता है। इंडेक्स एक फ़ील्ड, फ़ील्ड के पहले एन बाइट्स (या वर्ण), या दो या दो से अधिक फ़ील्ड पर आधारित हो सकते हैं। आपको "क्वेरी समझाएं" टूल के साथ काम करने की ज़रूरत है और अपने सिस्टम को अपने विशेष डेटा सेट और आमतौर पर चलने वाली खोजों के लिए सर्वश्रेष्ठ मिश्रण का पता लगाने के लिए बेंचमार्क करें। अधिक जानकारी के लिए यहां mysql दस्तावेज़ देखें: http://dev.mysql.com/doc/refman/5.0/en/create-index.html। –

6

माईसाम केवल तभी समझ में आता है जब आपको गति इतनी बुरी तरह की आवश्यकता हो कि आप इसे प्राप्त करने के लिए कई डेटा अखंडता मुद्दों को डाउनसाइड्स स्वीकार करने के इच्छुक हैं। आप किसी भी अशुद्ध शटडाउन पर database corruption के साथ समाप्त कर सकते हैं, no foreign keys, no transactions है, यह वास्तव में सीमित है। और चूंकि आधुनिक हार्डवेयर पर 3.5 मिलियन पंक्तियां एक छोटा डेटा सेट है (जब तक आपकी पंक्तियां बड़ी न हों), आप निश्चित रूप से उस बिंदु पर नहीं हैं जहां आपको विश्वसनीयता के बजाय प्रदर्शन के लिए अनुकूलित करने के लिए मजबूर होना पड़ता है क्योंकि आपके प्रदर्शन को हिट करने का कोई अन्य तरीका नहीं है लक्ष्य - यही एकमात्र ऐसी स्थिति है जहां आपको माईसाम के साथ रखना होगा।

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

मुझे MySQL पसंद नहीं है क्योंकि डेटाबेस में खराब डेटा प्राप्त करने के कई तरीके हैं जहां PostgreSQL उस व्यवहार के असहिष्णु है (Comparing Speed and Reliability देखें), बुरा MyISAM व्यवहार केवल चिंताओं का एक सबसेट है। यह देखते हुए कि MySQL समुदाय अब कितना फ्रैक्चर किया गया है और ओरेकल इसके साथ क्या करने जा रहा है, इसके बारे में अनिश्चितताएं, आप पोस्टग्रेएसक्यूएल पर एक नज़र डालने पर विचार करना चाहेंगे ताकि भविष्य में आपके पास कुछ और विकल्प हो। हाल ही में मुफ्त बीएसडी लाइसेंस प्राप्त PostgreSQL के आस-पास बहुत कम नाटक है, और कम से कम पूरे विकास समुदाय को उसी दिशा में धक्का दे रहा है।

+0

धन्यवाद ग्रेग, MySQL की राजनीति निश्चित रूप से मुझे थोड़ा डराता है। ऐसा लगता है कि मुझे PostgreSQL पर कुछ पढ़ना चाहिए और देखें कि क्या मैं अपने विकास कार्यक्रम में कुछ रैंप अप फिट कर सकता हूं। –

1

चूंकि यह एक पठन-भारी तालिका है, इसलिए मैं माईसाम तालिका प्रकार का उपयोग करने की अनुशंसा करूंगा। यदि आप विदेशी कुंजी का उपयोग नहीं करते हैं, तो आप this और that जैसी बग से बच सकते हैं।

बैक अप या तालिका को किसी अन्य सर्वर पर कॉपी करना उतना आसान है जितना कि FRM, MYI और MYD फ़ाइलों को कॉपी करना।

0

यदि आपको रिपोर्ट और जटिल समेकन की गणना करने की आवश्यकता है, तो ध्यान रखें कि पोस्टग्रेस 'क्वेरी ऑप्टिमाइज़र बल्कि स्मार्ट और सरल है, mysql "optimizer" गीला है, यह काफी सरल और गूंगा है।

एक बड़े से जुड़ने पर अंतर बहुत बड़ा हो सकता है।

माइस्क्लुएल का एकमात्र लाभ यह है कि यह टेबल को मारने के बिना इंडेक्स को हिट कर सकता है।

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

संबंधित मुद्दे