أفضل الممارسات لتطوير قاعدة بيانات Firebase في الوقت الفعلي

تستخدم أخبار Rush Firebase منذ 4 أشهر ، وعلى الرغم من أن هناك أشياء نود أن نرى تحسينًا (هل يمكنك تسمية "منتج مثالي؟") ، فقد كانت إضافة قيمة إلى مجموعتنا الخاصة بمتطلبات مزامنة بيانات الجوال الخاصة بنا.

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

RTFM!

عادة ما تكون وثائق SDK فظيعة ، حيث يميل الكثيرون منا إلى التنقيط للحصول على النقاط العالية والعودة إليها لاحقًا (أو أبدًا).

العكس هو الصحيح هنا. من السهل اتباع الإرشادات والعينات ، كما أن مستندات المراجع دقيقة ومضللة. في كل مرة تقريبًا لدى فريقنا سؤال أو مشكلة ، وجدنا الحل في شيء فاتنا في المستندات. جلسنا في النهاية و قرأنا كل كلمة مباشرة ، و قضينا 3 ساعات.

هناك أيضًا مدونة تمثل كنزًا للعثور على حلول لمشاكل العالم الحقيقي. فيما يلي بعض المنشورات التي وجدناها أكثر أهمية في News Rush:

  • مجموعة الأمان في قاعدة بيانات Firebase
  • استعلامات ، الجزء 1: استعلامات SQL الشائعة تحويل لـ Firebase
  • أفضل الممارسات: المصفوفات في Firebase

النتيجة الطبيعية: "مخطط أقل" لا يعني أقل من الدماغ!

من المفاهيم الخاطئة الشائعة أن قواعد البيانات الموجهة للمستندات تجعل التخطيط المسبق لكيفية تنظيم البيانات أقل أهمية. هذه خرافة. إذا كان هناك أي شيء ، فقد وجدنا العكس: فهي تتطلب المزيد.

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

و RTFM!

الدعم مربك

هناك عدد من خيارات الدعم ، ولكن محاولة استخدام الخيار الخطأ في موقف معين قد تكون محبطة. تجاربنا كانت:

  • الركود: المساعدة الذاتية الموجهة نحو المجتمع وعصف ذهني غير مناسبة لأماكن أخرى. غير مناسب لـ "شيء ما معطّل".
  • نموذج الدعم: مكان الدعم "الرسمي". أبلغ عن "شيء ما معطّل" هنا. من المحتمل أن تحصل طلبات الميزات على استجابة "سننظر في ذلك ، ولكن لا نعود".
  • مجموعات Google: المشاركة النشطة من قبل الفريق الأساسي مع التحذيرات المعتادة حول وقت التشغيل في أنظمة البريد الموجهة للمجموعات. أفضل مكان للمناقشات الفنية للغاية حول التطبيقات الداخلية والقضايا "غريبة".
  • StackOverflow: أوقات استجابة بطيئة / غير متوقعة ولكن أفضل مكان للمواد المرجعية الاحتياطية. إذا كنت قد قرأت سؤال وجواب على StackOverflow ، فأنت تعرف نوع السؤال الأفضل للنشر هناك أيضًا.

المراجع والاسترجاع البسيط "رخيص"

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

تنطبق قاعدة مماثلة على استرجاع البيانات. اعتاد القادمون من قواعد بيانات SQL على محاولة استرداد كائنات أكبر في أقل عدد ممكن من الاستعلامات لإزالة وقت الرحلة والاستعلام عن النفقات العامة. عند تسطيح هياكل البيانات ، من المغري نسخ البيانات "الموجزة" إلى مواقع متعددة للسماح باسترجاع واحد للحصول على كل ما هو مطلوب.

في Firebase ، هذا هو القرار الخاطئ كليًا تقريبًا. لسبب واحد ، تم تحسين عمليات الاسترجاع البسيطة القائمة على المفتاح / المرجع إلى حد كبير ، كما يوفر Firebase نطاقًا أفقيًا ضخمًا لهم. في اختبار أدائنا في News Rush ، وجدنا أيضًا أن Firebase يعمل بشكل أفضل مع كائنات أصغر وأكثر. حتى إزالة بعض الحقول غير الضرورية يمكن أن يوفر زيادة في الأداء قابلة للقياس.

كما هو الحال مع أنماط Redis المحسنة للهياكل مثل التجزئات والمجموعات ، فإن قابلية التوسع الأفقية الهائلة لـ Firebase هي إحدى ميزاتها الرئيسية. لا ينبغي أن يكون مجرد لطيفة. يجب الاستفادة منها كأداة في تصميمات تطبيقك.

تجنب المصفوفات

تغطي وثائق Firebase بالفعل هذا الموضوع. كل هذا صحيح. تجنبهم.

لا توجد تواريخ

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

حجم واحد لا يناسب الجميع

بدا الأمر وكأنه فكرة جيدة في ذلك الوقت ...

رفع نقاط القوة في Firebase. لا تحاول أن تفعل كل وظيفة لديك. فيما يلي بعض الأشياء Firebase ليست:

  • محرك بحث. لديها عدد قليل من العمليات الأساسية مثل مطابقة البادئة ، ولكن هذا كل شيء. استخدم ELK و Algolia وما إلى ذلك إذا كنت بحاجة إلى بحث كامل الوظائف.
  • مكدس API. تبدو وظائف Cloud for Firebase واعدة للغاية ، لكنها لا تزال في الإصدار التجريبي. إذا كان التطبيق الخاص بك لا يعدو كونه أكثر من قائمة مهام ، فعليك تخطيط كيفية تنفيذ التعليمات البرمجية من جانب الخادم / الموثوق به.
  • محرك التقارير. قد لا تزال ترغب في الاستفادة من قاعدة بيانات علائقية عندما تحتاج إلى شريحة / نرد / تصفية / تغيير / munge / الخ بياناتك.
  • ذاتية الاستضافة أو غير قابلة للاستخدام بشكل كامل يتم توفير وظيفة دون اتصال عبر المزامنة / الثبات ، ولكن يجب مشاركة سحابة Firebase في البداية.

تعيين مقابل التحديث

هناك فرق كبير بين عمليات SET و UPDATE. يؤثر على ما يحدث في حالة عدم وجود مفتاح حتى الآن ، وخاصة المفاتيح الموجودة داخل الكائنات المعقدة. انتبه لها!

FirebaseUI رائع!

يا يجب أن أذكر ، هناك مشاريع رفيق FirebaseUI لكثير من المنصات. استخدمهم. إنها مفيدة بشكل لا يصدق لأشياء مثل إعداد عرض جدول لعرض قائمة من الكائنات في مجموعة Firebase.

توفر هذه المكتبة فصول FUICollectionViewDataSource و FUITableViewDataSource (ومكافئاتها على نظام Android) والتي تجعل البدء في نظام أساسي متنقل بضعة أسطر من التعليمات البرمجية. كانت بداية التشغيل لطيفة للغاية عندما كنا نقيم في البداية Firebase. كنا قادرين على جمع دليل على المفهوم في غضون ساعات قليلة مع القليل جدا من التعلم المشاركة مقارنة بالخيارات الأخرى على الطاولة.

عندما تكون مستعدًا لمزيد من التطور والتحكم ، لا يزال FirebaseUI مفيدًا لأنه يوفر أيضًا فصول جمع البيانات ذات المستوى الأدنى FUIArray و FUIIndexArray التي تتيح لك قيادة أشياء مثل رؤوس علامات التبويب وشاشات العرض الأخرى.

هل فوت اي شيء؟ مشاركة بنفسك!