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.