حزم بيانات Firestore

تطبيق جديد لوثائق Firestore المخزنة مؤقتًا

Firestore أصبح أفضل للتو

تم تحسين Firebase Firestore مؤخرًا ويقوم الآن بتنفيذ ميزة جديدة تسمى "حزم بيانات Firestore". المفهوم الأساسي لذلك هو أنه يمكن الآن حزم استعلامات Firestore بتنسيق ثنائي وتقديمها عبر CDN أو حل استضافة آخر. يعني هذا بشكل فعال أن مجموعة معينة من بياناتك قد تكون مناسبة تمامًا لعدم جلبها مباشرة من الواجهة الخلفية لـ Firestore ، ولكن بالأحرى CDN وبالتالي يمكن أن توفر عليك بعض التكاليف.

لكن لماذا؟ والأهم كيف ؟!

تم تصميم "حزم بيانات Firestore" بشكل بسيط حقًا:

  • تقوم أولاً بإنشاء "حزمة بيانات" - مرجع في بيئة خادم عبر Admin SDK
  • بعد ذلك ، يتم تحميل هذه الحزمة باستخدام استعلامات Firestore القياسية
  • ما لديك بعد ذلك هو مخزن مؤقت لهذه البيانات يمكن تخزينه كملف ، على سبيل المثال ، أو في CDN الخاص بك
  • بالتبديل إلى جانب العميل ، كل ما تبقى الآن باستخدام واجهة برمجة تطبيقات Firestore الجديدة لتحميل الحزمة فعليًا من CDN الخاص بك
// On your server ....

/**
 * Generate a buffered bundle for user tempaltes.
 */
async function getUserTemplatesBundle(){
  // Create a bundle with ID 'user-templates'.
  const bundle = firestore.bundle("user-templates");
  
  // A plain Firestore-query.
  const snap = await firestore.collection('user-templates').get();

  return bundle
          .add('user-templates-query', snap)
          .build();
}

// ... then store the buffer, e.g. in your CDN ...
// On your client

import firebase from "firebase/app";
import "firebase/firestore";
import "firebase/firestore/bundle";

// ... init 'firestore' ...

async function loadFirestoreBundle() {
  // Just a simplified call to our demo CDN
  // to fetch the bundle in binary form.
  const rawBundle = await fetchBundleFromCDN();
  // Now tell Firestore to load the bundle
  await firestore.loadBundle(rawBundle);

  // Now get a reference to the bundled query, in
  // our case it's only one query that got bundled.
  const query = await db.namedQuery('user-templates-query');
  
  // Use 'cache' as source so that the data gets
  // cached locally - no Firestore queries will
  // be executed.
  const snap = await query.get({ source: 'cache' });

  // Finally, you can handle the snap like every other
  // Firestore snap in your app.
}

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

لذلك فإن هذه الميزة الجديدة هي الأنسب للمستندات التي تتوافق مع المتطلبات التالية: لا تتغير البيانات كثيرًا ، وعدد المستندات ليس كبيرًا جدًا وسيحدث العديد من عمليات الجلب لمجموعة البيانات هذه بشكل متكرر.

مثال آخر من العالم الحقيقي

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

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