2011-06-11 15 views
6

मैं बड़े डेटासेट के साथ काम कर रहा हूँ (रिकॉर्ड के लाखों लोगों की 10s, समय पर, लाखों लोगों के 100s), के लिए mysql और एक डेटाबेस प्रोग्राम है जो आर के साथ अच्छी तरह से लिंक का उपयोग करने के मैं mysql के बीच तय करने की कोशिश कर रहा हूँ चाहता हूँ और एसक्लाइट। डेटा स्थैतिक है, लेकिन मुझे बहुत सारे प्रश्न हैं जो मुझे करने की ज़रूरत है।SQLite या बड़े डेटासेट

इस link to sqlite help में, यह कहा गया है कि:।

"1024 बाइट के डिफ़ॉल्ट पृष्ठ आकार के साथ, एक SQLite डेटाबेस 2 टेराबाइट्स (241 बाइट्स) के आकार में सीमित है और अगर यह बड़ा डेटाबेस संभाल सकता, SQLite पूरे डेटाबेस को एक डिस्क फ़ाइल में संग्रहीत करता है और कई फाइल सिस्टम फाइलों के अधिकतम आकार को इससे कम कुछ तक सीमित करते हैं। इसलिए यदि आप इस परिमाण के डेटाबेस पर विचार कर रहे हैं, तो आपको क्लाइंट/सर्वर डेटाबेस इंजन का उपयोग करने पर विचार करना अच्छा होगा इसकी सामग्री एकाधिक डिस्क फ़ाइलों में, और शायद कई खंडों में। "

मुझे यकीन नहीं है कि इसका क्या अर्थ है। जब मैंने mysql और sqlite के साथ प्रयोग किया है, ऐसा लगता है कि MySQL तेज है, लेकिन मैंने बहुत कठोर गति परीक्षण नहीं बनाए हैं। मैं सोच रहा हूं कि मेरे डेटासेट के आकार के कारण एसक्लाइट की तुलना में MySQL मेरे लिए बेहतर विकल्प है या नहीं। ऊपर दिया गया वर्णन यह सुझाव देता है कि यह मामला हो सकता है, लेकिन मेरा डेटा 2TB के पास नहीं है।

discussion on stackoverflow था जो इस पर छू गया और उसी स्क्लाइट सूचना पृष्ठ का संदर्भ दिया, लेकिन इस सवाल को काफी हल नहीं किया गया।

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

उत्तर

6

SQLite डेटाबेस इंजन पूरे डेटाबेस को एक फ़ाइल में संग्रहीत करता है। यह अविश्वसनीय रूप से बड़ी फ़ाइलों के लिए बहुत प्रभावी नहीं हो सकता है (SQLite की सीमा 2TB है, जैसा कि आपने सहायता में पाया है)। इसके अलावा, SQLite एक समय में एक उपयोगकर्ता तक सीमित है। यदि आपका एप्लिकेशन वेब आधारित है या हो सकता है कि वह बहु-थ्रेडेड हो (जैसे एंड्रॉइड पर AsyncTask), तो MySQL शायद जाने का तरीका है।

व्यक्तिगत रूप से, जब से तुम परीक्षण किया है और mysql तेजी से होता है, मैं बस mysql के साथ जाना चाहते हैं। भविष्य में यह और अधिक स्केलेबल होगा और आपको और अधिक करने की अनुमति देगा।

+0

उन्होंने क्या कहा ... – Bohemian

1

एसक्यूएल यदि आप मुख्य रूप से इसे वेब सेवा के रूप में उपयोग कर रहे हैं। SQLite, यदि आप इसे ऑफ़लाइन कार्य करने में सक्षम होना चाहते हैं।

SQLite आम तौर पर बहुत बहुत तेजी से, डेटा के बहुमत (या सभी) के रूप में/अनुक्रमित स्मृति में कैश किया जाएगा। हालांकि, SQLite के मामले में। यदि डेटा अब तक मेरे अनुभव से कई तालिकाओं, या यहां तक ​​कि एकाधिक SQLite डेटाबेस फ़ाइलों में विभाजित है। यहां तक ​​कि लाखों अभिलेखों के लिए (मुझे अभी तक 100 मिलियन लाख हैं), यह एसक्यूएल (विलंबता/आदि की क्षतिपूर्ति) के बाद कहीं अधिक प्रभावी है। हालांकि वह तब होता है जब रिकॉर्ड्स अलग-अलग तालिकाओं में विभाजित होते हैं, और प्रश्न ऐसे तालिकाओं के लिए विशिष्ट होते हैं (सभी तालिकाओं को पूछताछ करें)।

एक उदाहरण एक साधारण गेम में उपयोग किया जाने वाला एक आइटम डेटाबेस होगा। हालांकि यह ज्यादा नहीं हो सकता है, फिर भी भिन्नता के लिए एक यूआईडी जारी किया जाएगा। तो जनरेटर जल्द ही बदलावों के साथ 'आंकड़े' के दस लाख सेट के लिए और अधिक काम करता है। हालांकि यह मुख्य रूप से विभिन्न तालिकाओं के बीच विभाजित रिकॉर्ड के प्रत्येक 1000 सेट के कारण था। (जैसा कि हम मुख्य रूप से अपने यूआईडी के माध्यम से रिकॉर्ड खींचते हैं)। हालांकि विभाजन का प्रदर्शन ठीक से मापा नहीं गया था। हमें ऐसे प्रश्न मिल रहे थे जो आसानी से 10 गुना तेजी से थे (एसक्यूएल (मुख्य रूप से नेटवर्क विलंबता के कारण)।

Amusingly हालांकि, हम कुछ 1000 प्रविष्टियों तक डेटाबेस को कम करने समाप्त हो गया, होने आइटम [उपसर्ग]/[प्रत्यय ठीक] विविधताओं निर्धारण करते हैं। (डायब्लो की तरह, केवल यह छिपा हुआ था)।जो दिन के अंत में बहुत तेजी से साबित हुआ।

एक तरफ ध्यान दें, हालांकि, मेरा मामला मुख्य रूप से प्रश्नों के कारण एक के बाद एक (एक से पहले की प्रतीक्षा कर रहा था) के कारण था। हालांकि, आप एक ही समय में सर्वर से कई कनेक्शन/प्रश्न करने में सक्षम हैं। एसक्यूएल में प्रदर्शन ड्रॉप, आपके ग्राहक पक्ष से अधिक मुआवजा दिया जाता है। इस प्रश्न को मानना ​​एक दूसरे के साथ शाखा/बातचीत नहीं करता है (उदाहरण के लिए। यदि परिणाम मिल गया है, तो वह है)

5

मुझे यकीन नहीं है कि इसका क्या अर्थ है। जब मैंने mysql और sqlite के साथ प्रयोग किया है, ऐसा लगता है कि MySQL तेज है, लेकिन मैंने बहुत कठोर गति परीक्षण नहीं बनाए हैं।

लघु लघु संस्करण है: अपने एप्लिकेशन एक फोन या कुछ अन्य एम्बेडेड सिस्टम पर फिट करने की जरूरत है

  1. हैं, SQLite का उपयोग करें। यही वह है जिसे इसके लिए डिजाइन किया गया था।

  2. अपने अनुप्रयोग कभी एक से अधिक एक समवर्ती कनेक्शन की आवश्यकता हो सकती है, तो SQLite का उपयोग नहीं करते। उपयोग PostgreSQL, InnoDB के साथ MySQL, आदि

+1

ओपी का उल्लेख है कि डेटा स्थैतिक है, जो बताता है कि शायद केवल 'चयन' चलाया जाएगा, इस मामले में SQLite समवर्ती कनेक्शन को अच्छी तरह से संभालने में सक्षम हो सकता है? – joran

+0

हाँ, लेकिन SQLite imho के लिए यह बहुत अधिक पंक्तियां है। इसके परिणामस्वरूप बहुत बड़ी फाइल होगी। –

3

ऐसा लगता है कि (आर में, कम से कम), कि SQLite तदर्थ विश्लेषण के लिए भयानक है। RSQLite या sqldf पैकेज के साथ डेटा लोड करना और प्रारंभ करना वाकई आसान है। लेकिन डेटा के लिए आप बार-बार उपयोग करेंगे, ऐसा लगता है कि MySQL (या SQL सर्वर) जाने का तरीका है क्योंकि यह आपके डेटाबेस को संशोधित करने के संदर्भ में बहुत अधिक सुविधाएं प्रदान करता है (उदाहरण के लिए, जोड़ना या बदलना कुंजी) ।

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