Firestore-Datumaj Faskoj

Nova efektivigo por kaŝmemoraj dokumentoj de Firestore

Firestore nur pliboniĝis

La Firebase Firestore ĵus pliboniĝis kaj nun efektivigas novan funkcion nomatan "Firestore Data Bundles". La kerna koncepto estas, ke demandoj de Firestore nun povas esti pakitaj en duuma formato kaj servitaj per via CDN aŭ alia gastiga solvo. Efike ĉi tio signifas, ke certa grupo de viaj datumoj eble taŭgas por ne esti prenita rekte de la backest de Firestore, sed prefere de CDN kaj tiel povas ŝpari al vi iujn kostojn.

Sed kial? Kaj pli grave, kiel ?!

"Firestore Data Bundles" estas efektive simple simplaj:

  • vi unue kreas "datuman pakon" -referencon en servila medio per la Admin SDK
  • tiam ĉi tiu pakaĵo ŝarĝas kun normaj demandoj pri Firestore
  • kion vi tiam havas estas bufro de ĉi tiuj datumoj, kiuj povas esti konservitaj kiel dosiero, ekzemple, aŭ en via CDN
  • ŝanĝante al via klienta flanko, ĉio restas nun uzante la novan Firestore API por efektive ŝargi la pakon de via 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.
}

La avantaĝo de tia datuma pakaĵo fariĝas pli klara rigardante ekzemplon. Imagu, ke vi ofte uzas defaŭltan valoron por nova dokumento en via Firestorejo, ekzemple kiam vi kreas novan uzanton. Anstataŭ preni rekte el la datumbazo, vi povas nun uzi "Firestore Data Bundles" por ŝarĝi ĉi tiujn valorojn kiel kaŝmemoran dokumenton de via CDN, evitante iujn ajn kostojn asociitajn kun Firestore-konsulto.

Ĉi tiu nova funkcio do plej taŭgas por dokumentoj konformaj al la jenaj postuloj: la datumoj ne ofte ŝanĝiĝas, la nombro de dokumentoj ne estas tre granda kaj multaj prenoj por ĉi tiu datuma aro ofte okazos.

Alia reala monda ekzemplo

Kiel eble ideala uzokazo, vi ankaŭ povas preni ĉi tiun progreseman retprogramon kiel ekzemplon. Ĉiuj tradukitaj tekstoj estas stokitaj en Firestore-kazo, same kiel la URL-referencoj al ĉiuj sondosieroj. Ĉar ĉi tiuj datumoj ne multe ŝanĝiĝas, se entute, ĝi tre taŭgas esti konservita en aŭ Firebase Storage aŭ mia CDN. Ĉi tio eble povas redukti miajn Firestore-kostojn signife.

"Firestore Data Bundles" estas tre bela aldono al Firebase. Ili eble ne traktas viajn uzokazojn nuntempe, sed povus iĝi tre helpemaj kiam via servo komenciĝos.