Firestore adatcsomagok

A gyorsítótárazott Firestore dokumentumok új megvalósítása

A Firestore csak jobb lett

A Firebase Firestore nemrégiben továbbfejlesztett, és most egy új funkciót vezet be, a „Firestore Data Bundles” néven. Ennek alapkoncepciója, hogy a Firestore lekérdezések bináris formátumban csomagolhatók és a CDN-en vagy más tárhelymegoldáson keresztül szolgálnak ki. Ez tulajdonképpen azt jelenti, hogy az adatok egy bizonyos csoportja alkalmas lehet arra, hogy ne közvetlenül a Firestore háttérprogramból, hanem inkább CDN-ről lehessen beolvasni, és ezáltal bizonyos költségeket takaríthat meg.

De miért? És ami még fontosabb, hogyan ?!

A „Firestore Data Bundles” valójában nagyon egyszerű:

  • először az Admin SDK segítségével hoz létre egy „adatcsomag” -referenciát egy kiszolgálói környezetben
  • akkor ez a csomag normál Firestore lekérdezésekkel töltődik be
  • ami akkor van, az az adatok puffere, amely például fájlként vagy a CDN-ben tárolható
  • kliens oldalra váltás, minden megmaradt az új Firestore API használatával a csomag tényleges betöltéséhez a CDN-ről
// 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.
}

Egy ilyen adatcsomag előnye világosabbá válik, ha egy példát nézünk. Képzelje el, hogy gyakran használ egy alapértelmezett értékkészletet egy új dokumentum számára a Firestore-ban, például új felhasználó létrehozásakor. Ahelyett, hogy közvetlenül beolvasna az adatbázisból, most a „Firestore Data Bundles” használatával ezeket az értékeket gyorsítótárazott dokumentumként töltheti be a CDN-ből, elkerülve a Firestore-lekérdezéssel járó költségeket.

Ez az új szolgáltatás tehát a legmegfelelőbb olyan dokumentumok számára, amelyek megfelelnek a következő követelményeknek: az adatok nem változnak gyakran, a dokumentumok száma nem túl nagy, és gyakran megtörténik sok lekérés ehhez az adathalmazhoz.

Egy másik valós példa

Talán ideális használati esetként ezt a progresszív webalkalmazást is példaként veheti figyelembe. Az összes lefordított szöveget egy Firestore példány tárolja, valamint az összes audio fájl URL-hivatkozása. Mivel ezek az adatok nem sokat változnak, ha egyáltalán, nagyon alkalmasak a Firebase Storage vagy a CDN tárolására. Ez potenciálisan jelentősen csökkentheti a Firestore költségeit.

A „Firestore Data Bundles” nagyon szép kiegészítés a Firebase-hez. Lehet, hogy egyelőre nem fedik le a felhasználási eseteket, de nagyon hasznosak lehetnek, amikor szolgáltatása növekedni kezd.