سؤال

في أحد التطبيقات التي تضمين SQLITE3 وتستخدم قاعدة بيانات داخل الذاكرة، هل من الممكن تكرار قاعدة البيانات بين مثيلتين تشغيلي للتطبيق؟ يمكنني القيام بذلك باليد مع بروتوكول مقلدي تكرار جميع وصول DB الخاص بي، ولكن يبدو وكأنه شيء يجب أن يتم داخل طبقة DB.

هل كانت مفيدة؟

المحلول

نهج القوة الغاشمة: أرسلها الأمر ".dump" لإنشاء تمثيل نصي للبيانات. اقرأ هذه البيانات في قاعدة البيانات الثانية. غير متأكد من أنه يمكنك استخدام ذلك.

إذا كنت بحاجة إلى تحديث محمز غرامة (إرسال نسخة من كل ما يصل إلى النسخة الأخرى)، فابحث في إلقاء نظرة على sqlite3_update_hook

ولكن كيف تخطط للتعامل مع الأخطاء؟ على سبيل المثال، ما يحدث عندما لا تستطيع نسخة DB في App2 إجراء تحديث لسبب ما؟

لحل هذا، انقل قاعدة البيانات إلى عملية الخادم ولها تطبيقتين يتحدثان إليه.

نصائح أخرى

خارج الصندوق، لا. هناك عدد صغير من خيارات الطرف الثالث:

SQLite Sync: https://ampliapps.com/sqlite-sync/ يبدو أن هذا جذابا لأنه قادر على النسخ المتماثل لقواعد بيانات أخرى وكذلك SQLite، ولا يقوم بتعديل محرك SQLite. أنا لم أحاول ذلك بعد.

Litereplica: http://litereplica.io/ طريقة واحدة فقط. يبدو أنه كان حول القليل.

litesync: http://litesync.io/ النسخ المتماثل في اتجاهين. جديد جدا، ولكن تطور litereplica ربما أكثر ناضجة مما يظهر. لقد جربت هذا قليلا، ويبدو أنه يعمل بسلاسة، مع وجود عدد قليل من الأخطاء التي ينظر إليها المطور. يجب عليك استخدام محرك SQLite المعدل في المطور، والذي يبدو وكأنه اعتماد يتعلق. أنت أيضا لا تحصل على الكثير من السيطرة، على سبيل المثال لا يمكنك أن تقول تكرار الآن دون إعادة فتح قاعدة البيانات.

LSYNCD - مزامنة الحية (مرآة) الخفي قد تكون مفيدة هنا. يستخدم RSYNC للقيام النسخ المتماثل المستمر على مستوى الملف.

إذا كنت تريد النسخ المتماثل في قاعدة بيانات في الذاكرة، فأنت بحاجة إلى إلقاء نظرة عليها بيركلي دي بي (BDB). وبعد ومع ذلك، فإن نموذج البيانات الخاص ب BDB هو قاموس سلسلة سلسلة، بحيث تفقد مرونة SQL. بالإضافة إلى أنه يحتوي على ترخيص ثلاث شرط، لذلك إذا كان مشروعك تجاري، فأنت بحاجة إلى الحصول على التراخيص.

لا لا لأن نطاق المشروع هو قاعدة بيانات بسيطة في العملية. ولكن نظرا لأن قاعدة البيانات مجرد ملف واحد، فيمكنك كتابة البرنامج النصي النسخ المتماثل الخاص بك بناء على عمليات نسخ ملف عادي أو RSYNC أو شيء مشابه.

إذا كنت تريد حقا نوع عميل / خادم مقره SQLite من RDBMS، فيمكنك إلقاء نظرة على sqlitedbms..

انسجام؟ أفضل ما يمكن أن تفعله على الرغم من أنه كان حارا، لأن SQLITE DB في ملف واحد متجانس. لا يمكنك جولة روبن بين اثنين من "الحالات". حار قطع غيار ليس سيئا، يمكنك ببساطة التقاط التطبيق الآخر + DB دون الكثير من الضجة، مقارنة مع MySQL Master-Slave أو السلبي النشط حيث يوجد بعض التدخل اليدوي الذي ليس بالأمر السهل. يمر النسخ المتماثل MySQL حول SQL، وليس فقط DiFFS مثل Unison / Rsync. ولكن مع انسجام ماجستير سيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top