Cloud Firestore + Android هي فقط

منذ وقت ليس ببعيد ، أطلقت Google Cloud Firestore. Cloud Firestore هي قاعدة بيانات NoSQL قائمة على السحابة وضعتها Google كبديل لقاعدة Realtime Database. في هذه المقالة أريد أن أقول كيفية البدء في استخدامه.


الاحتمالات


يسمح لك Cloud Firestore بتخزين البيانات على خادم بعيد ، والوصول إليها بسهولة ومراقبة التغييرات في الوقت الحقيقي. تحتوي الوثائق على مقارنة ممتازة بين Cloud Firestore وقاعدة بيانات Realtime.


إنشاء والاتصال بمشروع


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



لتكوين المشروع ، قم بتنفيذ الخطوات التالية:


  1. أضف Firebase إلى المشروع وفقًا للتعليمات الواردة من هنا.
  2. إضافة التبعية إلى التطبيق / build.gradle
    implementation 'com.google.firebase:firebase-firestore:18.1.0'

الآن كل شيء جاهز.


للتعرف على التقنيات الأساسية للعمل مع Cloud Firestore ، كتبت تطبيقًا بسيطًا. للعمل ، تحتاج إلى إنشاء مشروع في وحدة التحكم Firebase وإضافة ملف google-services.json إلى المشروع في Android Studio.


هيكل تخزين البيانات


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


تلقي وتسجيل البيانات


من أجل الحصول على جميع الوثائق الخاصة بالمجموعة ، يكون الكود التالي كافيًا


 remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents } .addOnFailureListener { exception -> //      } } 

نحن هنا نطلب جميع الوثائق من مجموعة المهام .


تسمح لك المكتبة بإنشاء استعلامات مع المعلمات. توضح التعليمة البرمجية التالية كيفية الحصول على المستندات من المجموعة حسب الحالة


 remoteDB.collection(“Tasks”) .whereEqualTo("title", "Task1") .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents } .addOnFailureListener { exception -> //      } } 

نطلب هنا جميع المستندات من مجموعة المهام التي يتوافق معها حقل العنوان مع قيمة Task1 .


عند استلام المستندات ، يمكن تحويلها على الفور إلى فئات البيانات الخاصة بنا


 remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents val taskList: List<RemoteTask> = querySnapshot.toObjects(RemoteTask::class.java) } .addOnFailureListener { exception -> //      } } 

للكتابة ، تحتاج إلى إنشاء Hashmap مع البيانات (حيث يكون اسم الحقل هو المفتاح ، وتكون قيمة هذا الحقل هي القيمة) ونقلها إلى المكتبة. يوضح الرمز التالي هذا


 val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .add(taskData) .addOnSuccessListener { //   } .addOnFailureListener { //     } 

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


 val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .document("New task") .set(taskData) .addOnSuccessListener { //   } .addOnFailureListener { //     } 

في هذه الحالة ، إذا لم يكن هناك مستند ذي معرف يساوي مهمة جديدة ، فسيتم إنشاؤه ، وإذا كان هناك ، فسيتم تحديث الحقول المحددة.


خيار آخر لإنشاء / تحديث وثيقة


 remoteDB.collection("Tasks") .document("New task") .set(mapToRemoteTask(task)) .addOnSuccessListener { //   } .addOnFailureListener { //     } 

اشترك في التغييرات


Firestore يسمح لك بالاشتراك في تغييرات البيانات. يمكنك الاشتراك في التغييرات التي تم إجراؤها على المجموعة وكذلك التغييرات في مستند معين


 remoteDB.collection("Tasks") .addSnapshotListener { querySnapshot, error -> // querySnapshot -   // error -  } 

querySnapshot.documents - يحتوي على قائمة محدثة بكافة المستندات
querySnapshot.documentChanges - يحتوي على قائمة التغييرات. كل كائن يحتوي على وثيقة معدلة ونوع التغيير. 3 أنواع من التغييرات ممكنة
تمت الإضافة - تمت إضافة المستند ،
تم التعديل - تم تغيير المستند ،
أزال - تم حذف المستند


تحميل كميات كبيرة من البيانات


يوفر Realtime Database آلية أقل ملاءمة لتنزيل كميات كبيرة من البيانات ، والتي تتكون في تحرير ملف json وتنزيله يدويًا. من خارج منطقة الجزاء ، لا يقدم Firestore أي شيء من هذا القبيل. لقد كان من غير المريح جدًا إضافة مستندات جديدة حتى وجدت طريقة لتحميل كمية كبيرة من المعلومات بسهولة. لكي لا تواجه مشكلات مثل مشكلتي ، سأرفق أدناه إرشادات حول كيفية تنزيل كمية كبيرة من البيانات بسرعة وسهولة. تم العثور على التعليمات على شبكة الإنترنت.


  1. تثبيت Node.js و npm
  2. قم بتثبيت حزمة firebase-admin عن طريق تشغيل الأمر
    npm install firebase-admin --save
  3. توليد ملف json مع جمع البيانات. يمكن العثور على مثال في ملف Tasks.json.
  4. للتنزيل ، نحتاج إلى مفتاح وصول. كيفية الحصول عليها موصوفة بشكل جيد في هذه المقالة.
  5. في ملف export.js وضع البيانات الخاصة بك
    تتطلب ('./ firestore_key.json') - ملف به مفتاح وصول. كنت في مجلد مع البرنامج النصي
    <YOU_DATABASE> - اسم قاعدة firestore الخاصة بك
    "./json/Tasks.json" - المسار إلى الملف الذي به البيانات
    ['تم إنشاؤه'] - قائمة بأسماء الحقول بنوع الطابع الزمني
  6. تنفيذ البرنامج النصي
    node export.js
    السيناريو يستخدم تطورات dalenguyen

استنتاج


لقد استخدمت Cloud Firestore في أحد مشاريعي ولم أواجه أي مشاكل خطيرة. تحتوي إحدى مجموعاتي على حوالي 15000 مستند واستعلام عليها سريعة جدًا وهذا بدون استخدام الفهارس. باستخدام Cloud Firestore بالاقتران مع Room and Remote Config ، يمكنك تقليل عدد المكالمات إلى قاعدة البيانات بشكل كبير وعدم تجاوز الحدود المجانية. في تعريفة مجانية في اليوم ، يمكنك قراءة 50000 وثيقة ، وتسجيل 20،000 وحذف 20،000.


أداء التطبيق

Source: https://habr.com/ru/post/ar447640/


All Articles