دراسة حالة: مُزامنة قاعدة بيانات محليّة مع أُخرى على السحاب

مُزامنة أنظمة تخزين مُختلفة محليّة وعلى السحاب

فراس اللومنذ 6 سنوات

واجهتني خلال الأيام الماضية حالة برمجية بحاجة لحل عملي، وهي حالة تتعلّق بشكل أساسي بقواعد البيانات وبتخزين البيانات سحابيًا وعلى جهاز المُستخدم أيضًا.

المشروع عبارة عن تطبيق على الهواتف الذكية، ومن الضروري وجود البيانات عليه لأن استعلامات كثيرة ستجري أثناء استخدامه، وبالتالي فإن خيار الاستعانة بقواعد بيانات سحابية مثل تلك التي توفّرها "فايربيز" Firebase من غوغل أمر مُستحيل. لكن وفي نفس الوقت، يجب أن تكون هناك قاعدة بيانات على السحاب لتحديث البيانات الموجودة على الجهاز.

لماذا؟ لأنني ببساطة لا أرغب بإصدار تحديثات للتطبيق داخل متجر التطبيقات كُلّما أضفت عناصر جديدة لقاعدة البيانات، أو كُلّما طرأ تغيير أو تعديل عليها. ولهذا السبب جلست أبحث عن حل يسمح لي باستخدام قاعدة بيانات محليّة بغضّ النظر عن النظام، مع وجود قاعدة على السحاب تعمل كمرجع دائمًا.

الحل الذي اخترته كان على الشكل التالي:

بما أن المشروع عبارة عن تطبيق للهواتف الذكية، "آي أو إس" وأندرويد، فإن الحل الأمثل هو استخدام نظام تخزين محلّي وليكن قاعدة بيانات sqlite على سبيل المثال لا الحصر. يُمكن في هذه الحالة استخدام أكثر من مُحرّك للتعامل مع القاعدة سواءً المكتبات الافتراضية مثل Core Data في iOS، أو حتى مُحرّكات أُخرى مثل Realm مثلًا. في تلك القاعدة سيكون هناك جدول باسم Configs مهمّته حفظ نسخة قواعد البيانات. وعند تحميل التطبيق للمرّة الأولى، يكون ذلك الجدول فارغ دون أية أسطر.

على السحاب هناك بيانات موجودة على "فايرستور" Firestore من غوغل، فيها أيضًا جدول (مجموعة) باسم Configs فيها رقم إصدار قاعدة البيانات. كما يوجد جدول آخر فيه جميع المُنتجات.

عند تشغيل التطبيق على الهاتف، سأقوم بفحص قاعدة البيانات المحليّة لمعرفة رقم الإصدار، وفي حالة عدم وجود أي بيانات (عند تشغيل التطبيق أول مرّة)، يتم الاتصال بقاعدة البيانات السحابية لتحميل جميع المُنتجات أولًا وإضافتها لقاعدة البيانات المحليّة، ثم يتم إضافة سطر لجدول Configs على الهاتف بمعرّف ID يساوي 1 مع إصدار قاعدة البيانات.

عند تكرار عملية تشغيل التطبيق من جديد، سيتم البحث عن رقم الأصدار، وهذه المرّة سيتم العثور عليه. بعدها سيتم الاتصال بالسحاب لمقارنة أرقام الإصدارات، لو كانت مُتساوية، سيعمل التطبيق دون مشاكل. لو كان رقم الإصدار على السحاب أكبر من رقم الإصدار المحلّي فهذا يعني أن بيانات جديدة موجودة. وهنا سيتم التوجّه لجدول (مجموعة) على السحاب باسم التحديثات Updates فيها البيانات الجديدة التي يجب إضافتها، والبيانات التي يجب تعديلها. وبهذه الحالة أضمن أن المُستخدم وعند تشغيل التطبيق سيستخدم آخر إصدار من البيانات بشكل دائم.

طبعًا هذه الحالة مُجرّد تفضيل شخصي، وهذه مقالة للنقاش لرؤية الحلول التي يستخدمها كل شخص للاستفادة منها.

على الهامش: "فايربيز" من غوغل توفّر إمكانية استخدام البيانات دون اتصال بالإنترنت، لكنني كمُطوّر لا يُمكنني إجبارها على القراءة من الكاش، بل تلجأ لهذا الأمر فقط عند فُقدان الاتصال بالإنترنت، وبالتالي لا ينفع خيار تخزين البيانات فقط على السحاب. هناك أيضًا خيار آخر وهو Realm Platform، لكنها مدفوعة بعد شهر مجاني، وهذا خيار غير مُفيد في الوقت الراهن، لهذا السبب لجأت للخيار الموجود أعلاه.

كلمات دليلية: firebase
3
إعجاب
3213
مشاهدات
1
مشاركة
2
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !