इस प्रश्न को डुप्लिकेट के रूप में चिह्नित करने से पहले, कृपया मुझे सुनें !!
मैंने पहले से ही प्रश्नों को बेहतर तरीके से पढ़ा है कि प्रदर्शन में सुधार कैसे करें। बस कुछ Improve INSERT-per-second performance of SQLite? और What are the performance characteristics of sqlite with very large database files?SQLite: व्यावहारिक सीमाएं क्या हैं?
का उल्लेख करने के लिए मैं 5 गीगाबाइट्स के डेटाबेस फ़ाइल आकार के साथ स्क्लाइट काम करने के लिए संघर्ष कर रहा हूं। इसके विपरीत वहां लोग हैं, जो दावा करते हैं कि स्क्लाइट उनके लिए 'महान' काम करता है, भले ही डेटाबेस का आकार 160 जीबी जितना बड़ा हो। मैंने इसे स्वयं नहीं किया है लेकिन पूछे गए प्रश्नों से, मुझे लगता है कि सभी बेंच-मार्किंग शायद डेटाबेस में केवल तालिका के साथ किया जाता है। 20 या टेबल
- -
मैं
के साथ एक डेटाबेस का उपयोग कर रहा तालिकाओं में से आधे से अधिक 15 कॉलम
है - इन 15 या तो स्तंभ-टेबल से प्रत्येक 6/7 विदेशी कुंजी है कॉलम - इन तालिकाओं में से कुछ पहले से ही एक महीने में 27 मिलियन रिकॉर्ड हो चुके हैं
मैं जिस विकास मशीन का उपयोग कर रहा हूं वह 3 गीगाहर्ट्ज क्वाड कोर मशीन है जिसमें 4 गीगा रैम है और फिर भी इसमें 3 मिनट से अधिक समय लगता है बस इन बड़ी तालिकाओं में row_count पूछने के लिए।
मुझे क्षैतिज डेटा को विभाजित करने का कोई तरीका नहीं मिला। मेरे पास सबसे अच्छा शॉट डेटा को प्रत्येक डेटाबेस के लिए एकाधिक डेटाबेस फ़ाइलों में विभाजित करना है। लेकिन उस स्थिति में, जहां तक मुझे पता है, विदेशी कुंजी कॉलम बाधाओं को नियोजित नहीं किया जा सकता है, इसलिए मुझे एक आत्मनिर्भर तालिका (बिना किसी विदेशी कुंजी के) बनाना होगा।
तो मेरे प्रश्न
ए) क्या मैं नौकरी के लिए गलत डेटाबेस का उपयोग कर रहा हूं?
बी) आपको क्या लगता है कि मैं गलत कहां जा रहा हूं?
सी) मैंने अभी तक विदेशी कुंजी पर इंडेक्स नहीं जोड़े हैं, लेकिन यदि केवल पंक्ति गणना क्वेरी में चार मिनट लगते हैं तो विदेशी कुंजी की अनुक्रमणिका मुझे कैसे मदद करती हैं?
संपादित भले ही कोई भी कहा है कि और अधिक जानकारी प्रदान करने के लिए यह हों :) मैं SQLite संस्करण 3.7.9 का उपयोग कर रहा system.data.sqlite.dll संस्करण 1.0.77.0
EDIT2 साथ: मुझे लगता है कि जहां मैं 160 गीग लोगों से अलग जा रहा हूं वह यह है कि वे एक व्यक्तिगत रिकॉर्ड या रिकॉर्ड की एक छोटी सी श्रृंखला का चयन कर सकते हैं। लेकिन मुझे अपनी तालिका में सभी 27 लाख पंक्तियों को लोड करना होगा, उन्हें अन्य तालिकाओं के साथ शामिल करना होगा, उपयोगकर्ता द्वारा पूछे गए रिकॉर्ड को समूहित करना होगा और परिणामों को वापस करना होगा। ऐसे परिणामों के लिए डेटाबेस को अनुकूलित करने का सबसे अच्छा तरीका क्या है इस पर कोई इनपुट।
मैं पिछले प्रश्न के परिणामों को कैश नहीं कर सकता क्योंकि यह मेरे मामले में समझ में नहीं आता है। कैश को मारने की संभावना काफी कम होगी।
यदि अन्य लोग कह रहे हैं कि 160 जीबी डेटाबेस ठीक चलते हैं, तो स्पष्ट रूप से यह कुछ ऐसा होना चाहिए जो आप कर रहे हैं, लेकिन आप हमें नहीं बता रहे हैं कि आप कैसे कर रहे हैं, यह कहकर कि आपके पास विदेशी पर कोई अनुक्रमणिका नहीं है चांबियाँ। क्या आपने * विदेशी कुंजी को अनुक्रमणित करने की कोशिश की है? –
पूछे गए प्रश्नों के अनुसार मुझे लगता है कि 160 जीबी डेटाबेस केवल एक टेबल का उपयोग कर रहे थे। नहीं, मैंने अभी तक विदेशी कुंजी पर इंडेक्स नहीं जोड़े हैं, क्योंकि जब भी मैं एक क्वेरी चलाता हूं जहां विदेशी कुंजी शामिल नहीं हैं यानी 'कुछ_table से गिनती (*) का चयन करें, sqlite को इस क्वेरी के परिणाम को वापस करने में कुछ मिनट लगते हैं। मैं विदेशी कुंजी में इंडेक्स जोड़ूंगा और वापस आऊंगा। कृपया मुझे बताएं कि आप और जानना चाहेंगे। – WPFAbsoluteNewBie
क्या आपके पास टेबल पर इंडेक्स हैं? –