2008-09-17 4 views
53

यदि मेरे पास बड़ी संख्या में SQLite डेटाबेस हैं, तो सभी एक ही स्कीमा के साथ, सभी डेटाबेस पर क्वेरी करने के लिए उन्हें एक साथ मर्ज करने का सबसे अच्छा तरीका क्या है?मैं कई SQLite डेटाबेस कैसे विलय कर सकता हूं?

मुझे पता है कि ऐसा करने के लिए ATTACH का उपयोग करना संभव है लेकिन मशीन पर मेमोरी सिस्टम के आधार पर इसमें 3212 और 64 डेटाबेस के a limit हैं।

उत्तर

14

यह मांग पर किया जाएगा, दिन में कई बार संभव है। जिस तरह से मैं इसे काम देखता हूं वह http://sqlite.1065341.n5.nabble.com/Attempting-to-merge-large-databases-td39548.html में है जहां डेटाबेस को बड़े डीबी में विलय कर दिया जाता है, क्वेरी निष्पादित की जाती है और फिर बड़े डेटाबेस को हटा दिया जाता है।

2

यदि आपको केवल एक बार यह विलय ऑपरेशन करने की आवश्यकता है (एक नया बड़ा डेटाबेस बनाने के लिए), तो आप एक स्क्रिप्ट/प्रोग्राम बना सकते हैं जो आपके सभी एसक्लाइट डेटाबेस को लूप करेगा और फिर डेटा को आपके मुख्य (बड़े) डेटाबेस में डालें।

0

कोई अपराध नहीं, बस एक डेवलपर के रूप में, मुझे डर है कि आपका विचार बहुत अक्षम है। ऐसा लगता है कि SQLite डेटाबेस को एकजुट करने के बजाय आपको शायद उसी डेटाबेस फ़ाइल में कई तालिकाओं को संग्रहित करना चाहिए।

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

+0

दो डेटाबेस विलय उपयोगी होता है जब डेटाबेस इंजीनियर कुछ तरीकों से संरचना या सामग्री को संशोधित करने के लिए एक अलग प्रति के साथ काम कर रहा है, और इस बीच पुराने, लाइव संस्करण उपयोगकर्ताओं द्वारा संशोधित किया जा रहा है। – Beejor

4

आप नौकरी करने के लिए एक diff/merge सॉफ़्टवेयर का भी उपयोग कर सकते हैं। आप SQLite Compare आज़मा सकते हैं, यह अन्य चीजों के साथ बड़ी SQLite तालिकाओं की तुलना और विलय का समर्थन करता है।

गुड लक

Liron

+0

http://download.cnet.com/3001-10254_4-10964767.html?spi=5484eicies6319e24014aac6ce19f95e93 – JustCurious

50

Davidm के जवाब में Nabble post से संक्षेप में:

attach 'c:\test\b.db3' as toMerge;   
BEGIN; 
insert into AuditRecords select * from toMerge.AuditRecords; 
COMMIT; 
detach toMerge; 

दोहराएँ के रूप में की जरूरत है।

नोट: detach toMerge; माइक की टिप्पणी के अनुसार जोड़ा गया।

+5

और * काम करने के बाद * 'अलग करने के लिए'; * *। – mike

+2

यह केवल एक टेबल को मर्ज करेगा जो मुझे लगता है। आप एक बार में कई टेबल कैसे आयात करेंगे, अपनी विदेशीकी को संरक्षित करेंगे? – ILoveCoding

+0

मैंने यह कोशिश की, लेकिन संलग्न डीबी के कॉलम जहां किसी कारण से गलत तरीके से ग़लत हस्ताक्षर किए गए और परिणाम गलत था। इसलिए, मुझे INSERT और SELECT कथन में उसी क्रम में कॉलम नाम स्पष्ट रूप से अवश्य देना था। –