2009-12-11 15 views
24

SQLite3 को एम्बेड करने वाले एप्लिकेशन में और इन-मेमोरी डेटाबेस का उपयोग करता है, क्या यह एप्लिकेशन के दो चल रहे उदाहरणों के बीच डेटाबेस को दोहराना संभव है? मैं इसे अपने सभी डीबी एक्सेसों को डुप्लिकेट करने वाले होमब्रू प्रोटोकॉल के साथ हाथ से कर सकता हूं, लेकिन ऐसा लगता है कि डीबी परत के अंदर कुछ किया जाना चाहिए।SQLite समर्थन प्रतिकृति करता है?

उत्तर

12

ब्रूट फोर्स दृष्टिकोण: डेटा का टेक्स्ट प्रस्तुति बनाने के लिए इसे ".dump" कमांड भेजें। उस डेटा को दूसरे डेटाबेस में पढ़ें। सुनिश्चित नहीं है कि आप इसका उपयोग कर सकते हैं।

आप एक ठीक छोटाबीजवाला अद्यतन (अन्य प्रतिलिपि तक प्रत्येक की प्रतिलिपि भेजने) की जरूरत है, sqlite3_update_hook

पर एक नजर है लेकिन आप कैसे त्रुटियों को संभालने के लिए योजना बनाई है? उदाहरण के लिए, क्या होता है जब ऐप 2 में डीबी की प्रति किसी कारण से अपडेट नहीं कर सकती है?

इसे हल करने के लिए, डेटाबेस को सर्वर प्रक्रिया में ले जाएं और दो ऐप्स इससे बात करें।

+0

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

+1

ठीक है। बस सुनिश्चित करें कि दोनों प्रतियां एक ही समय में स्मृति/डिस्क स्थान से बाहर हो जाती हैं, आदि –

+0

यह एक गंभीर उत्तर की तरह प्रतीत नहीं होता है। हां आप अंततः इसे स्वयं बना सकते हैं, लेकिन यह विश्वसनीय बनाने के लिए एक बड़ा उपक्रम होगा। –

0

नहीं, ऐसा इसलिए नहीं है क्योंकि परियोजना का दायरा एक सरल इन-प्रोसेस डेटाबेस है। लेकिन चूंकि डेटाबेस केवल एक फ़ाइल है, इसलिए आप सादा फ़ाइल कॉपी ऑपरेशंस, rsync या कुछ समान के आधार पर अपनी खुद की प्रतिकृति स्क्रिप्ट लिख सकते हैं।

यदि आप वास्तव में एक SQLite आधारित क्लाइंट/सर्वर प्रकार आरडीबीएमएस चाहते हैं, तो आप SQLiteDBMS पर एक नज़र डाल सकते हैं।

1

यदि आप इन-मेमोरी डेटाबेस में प्रतिकृति चाहते हैं तो आपको berkeley DB (BDB) पर देखने की आवश्यकता है। हालांकि बीडीबी के लिए डेटा मॉडल स्ट्रिंग-स्ट्रिंग डिक्शनरी है, इसलिए आप एसक्यूएल की लचीलापन खो देते हैं। इसके अलावा इसमें तीन क्लॉज लाइसेंस हैं, इसलिए यदि आपकी परियोजना वाणिज्यिक है तो आपको लाइसेंस प्राप्त करने की आवश्यकता है।

0

यूनिसन? सबसे अच्छा आप गर्म स्पेयर था हालांकि कर सकते थे, क्योंकि एक monolithic फ़ाइल में SQLite डीबी। आप दो "उदाहरण" के बीच राउंड-रॉबिन नहीं कर सके। हॉट स्पेयर बुरा नहीं है, आप बस बिना किसी परेशानी के अन्य ऐप + डीबी उठाते हैं, MySQL मास्टर-गुलाम या सक्रिय-निष्क्रिय की तुलना करें जहां कुछ मैन्युअल हस्तक्षेप है जो आसान नहीं है। MySQL प्रतिकृति एसक्यूएल के आसपास गुजरती है, न कि सिर्फ एकजुट/rsync की तरह diffs। लेकिन एकजुट होने के साथ आपके पास मास्टर-मास्टर है।

2

Lsyncd - Live Syncing (Mirror) Daemon यहां उपयोग किया जा सकता है। यह फ़ाइल स्तर पर निरंतर प्रतिकृति करने के लिए rsync का उपयोग करता है।

+0

यह संभवतः लाइव चलने वाले डेटाबेस के लिए एक अच्छा विचार नहीं है। इसके परिणामस्वरूप दास डेटाबेस दूषित हो सकता है यदि यह लेनदेन के दौरान प्रतिकृति करता है। –

5

वहाँ 2 विकल्प डीबी परत के अंदर कार्यान्वित कर रहे हैं:

litereplica (एक दिशा प्रतिकृति, वास्तविक समय वृद्धिशील बैकअप)

{ Characteristics: [ 
    "replica db is binary equivalent of main db when synchronized", 
    "replica db is read-only", 
    "all the db is replicated" ], 
Split Brain: "not applicable, as it is single master", 
Additional Features: "Point-in-time recovery, encryption using ChaCha", 
Interface: "native SQLite. Existing wrappers for SQLite can be used", 
Notes: "does not support WAL", 
License: "commercial" } 

litesync (बहु मास्टर प्रतिकृति और तुल्यकालन)

{ Characteristics: [ 
    "can write to the db even when it is off-line", 
    "fast (first write to local db, then synchronize using a worker thread)", 
    "avoids insert id collisions using modified rowids" ], 
Split Brain: "does not occur because it uses a star topology", 
Additional Features: "encryption using ChaCha", 
Interface: "native SQLite. Existing wrappers for SQLite can be used", 
Notes: "use attached db for replication of only some tables", 
License: "commercial" } 
+0

आपके उत्तर के लिए धन्यवाद। मैंने आपके द्वारा लिटेरेप्लिका के बारे में उल्लेख किए गए लिंक को पढ़ा और इसे डाउनलोड किया। हालांकि, मास्टर गुलाम को स्थापित करने के बारे में पर्याप्त जानकारी नहीं है (ईमानदारी से, मैंने इसे पहले कभी नहीं किया है, इसलिए मैं थोड़ा उलझन में हूं) .. क्या आपके पास इसके बारे में कुछ और जानकारी है या इसके बारे में एक ट्यूटोरियल है? धन्यवाद – mOna

+0

वेबसाइट पर वीडियो की जांच करें। – malhal

0

बॉक्स के बाहर, नहीं।

SQLite सिंक: https://ampliapps.com/sqlite-sync/ यह एक आकर्षक लगता है, क्योंकि यह अन्य डेटाबेस के साथ-साथ SQLite को दोहराने कर सकते हैं, और SQLite इंजन संशोधित नहीं करता तीसरे पक्ष के विकल्पों में से एक छोटा सा संख्या में हैं। मैंने अभी तक कोशिश नहीं की है।

लाइट्रेप्लिका: http://litereplica.io/ केवल एक ही रास्ता। ऐसा लगता है कि थोड़ा सा रहा है।

लाइटसिंक: http://litesync.io/ दो-तरफा प्रतिकृति। बहुत नया, लेकिन Litereplica का एक विकास शायद यह दिखाई देने से अधिक परिपक्व है।मैंने इसे थोड़ा सा करने की कोशिश की है और यह कुछ बग्स के साथ आसानी से काम करता प्रतीत होता है जो डेवलपर देख रहा है। आपको डेवलपर के संशोधित SQLite इंजन का उपयोग करना होगा, जो एक संबंधित निर्भरता जैसा प्रतीत होता है। आपको भी ज्यादा नियंत्रण नहीं मिलता है, उदा। आप डेटाबेस को फिर से खोलने के बिना अभी दोहराना नहीं कह सकते हैं।

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