इसलिए मैंने बहुत बड़ी फ़ाइलों के लिए साइक्लाइट के साथ कुछ परीक्षण किए, और कुछ निष्कर्षों पर आया (कम से कम मेरे विशिष्ट एप्लिकेशन के लिए)।
परीक्षणों में एकल तालिका, या कई तालिकाओं के साथ एक एकल sqlite फ़ाइल शामिल है। प्रत्येक तालिका में लगभग 8 कॉलम, लगभग सभी पूर्णांक और 4 सूचकांक थे।
विचार यह था कि पर्याप्त डेटा तब तक डाला जाए जब तक कि स्क्लाइट फाइल लगभग 50GB न हो जाए।
सिंगल टेबल
मैंने सिर्फ एक तालिका के साथ एक sqlite फ़ाइल में कई पंक्तियों को सम्मिलित करने का प्रयास किया। जब फ़ाइल 7GB के बारे में थी (क्षमा करें, मैं पंक्ति गणना के बारे में विशिष्ट नहीं हो सकता) सम्मिलन बहुत लंबा हो रहा था। मैंने अनुमान लगाया था कि मेरे सभी डेटा को सम्मिलित करने के लिए मेरे परीक्षण में 24 घंटे लगेंगे, लेकिन यह 48 घंटे के बाद भी पूरा नहीं हुआ।
यह मुझे यह निष्कर्ष निकालने की ओर ले जाता है कि एकल, बहुत बड़ी साइक्लाइट तालिका में सम्मिलन के साथ मुद्दे होंगे, और शायद अन्य संचालन भी।
मुझे लगता है कि यह कोई आश्चर्य की बात नहीं है, क्योंकि तालिका बड़ी हो जाती है, सभी सूचकांकों को सम्मिलित करने और अपडेट करने में अधिक समय लगता है।
एकाधिक तालिकाओं
फिर मैंने प्रति दिन एक टेबल, कई टेबल पर डेटा को विभाजित करने की कोशिश की। मूल 1 तालिका के लिए डेटा को ~ 700 तालिकाओं में विभाजित किया गया था।
इस सेटअप को सम्मिलन के साथ कोई समस्या नहीं थी, समय बढ़ने के साथ इसमें अधिक समय नहीं लगा, क्योंकि हर दिन के लिए एक नई तालिका बनाई गई थी।
वैक्यूम मुद्दे
जैसा कि i_like_caffeine द्वारा बताया गया है, VACUUM कमांड एक समस्या है जितना बड़ा साइक्लाइट फ़ाइल है। जैसा कि अधिक आवेषण / हटाए जाते हैं, डिस्क पर फ़ाइल का विखंडन बदतर हो जाएगा, इसलिए लक्ष्य समय-समय पर VACUUM होता है जो फ़ाइल का अनुकूलन करता है और फ़ाइल स्थान को पुनर्प्राप्त करता है।
हालाँकि, जैसा कि दस्तावेज़ीकरण द्वारा बताया गया है , डेटाबेस की एक पूरी प्रतिलिपि एक वैक्यूम करने के लिए बनाई गई है , जिसे पूरा करने में बहुत लंबा समय लगता है। इसलिए, डेटाबेस जितना छोटा होगा, यह ऑपरेशन उतनी ही तेजी से खत्म होगा।
निष्कर्ष
अपने विशिष्ट एप्लिकेशन के लिए, मैं संभवतः वैक्यूम प्रदर्शन और सम्मिलन / डिलीट स्पीड दोनों का सर्वश्रेष्ठ पाने के लिए प्रति दिन एक, कई db फ़ाइलों पर डेटा को विभाजित कर रहा हूँ।
यह प्रश्नों को जटिल बनाता है, लेकिन मेरे लिए, यह इस डेटा को अनुक्रमित करने में सक्षम होने के लिए एक सार्थक ट्रेडऑफ़ है। एक अतिरिक्त लाभ यह है कि मैं केवल एक दिन के डेटा (मेरे आवेदन के लिए एक सामान्य ऑपरेशन) को छोड़ने के लिए एक पूरी db फ़ाइल को हटा सकता हूं।
मुझे शायद प्रति फ़ाइल तालिका आकार की निगरानी करनी होगी और यह देखना होगा कि गति कब समस्या बन जाएगी।
यह बहुत बुरा है कि ऑटो वैक्यूम के अलावा कोई वृद्धिशील वैक्यूम विधि नहीं लगती है । मैं इसका उपयोग नहीं कर सकता क्योंकि वैक्यूम के लिए मेरा लक्ष्य फ़ाइल को डीफ़्रैग्मेन्ट करना है (फ़ाइल स्थान कोई बड़ी बात नहीं है), जो ऑटो वैक्यूम नहीं करता है। वास्तव में, प्रलेखन में कहा गया है कि यह विखंडन को बदतर बना सकता है, इसलिए मुझे समय-समय पर फ़ाइल पर एक पूर्ण वैक्यूम का सहारा लेना पड़ता है।