Firestore-databondels

'N Nuwe implementering vir geborge Firestore-dokumente

Firestore het net beter geword

Die Firebase Firestore is onlangs verbeter en implementeer nou 'n nuwe funksie genaamd "Firestore Data Bundles". Die kernkonsep daarvan is dat Firestore-navrae nou in binêre formaat verpak kan word en via u CDN of ander hosting-oplossing aangebied kan word. Dit beteken effektief dat 'n sekere groep van u gegewens baie goed kan wees om nie direk vanaf die Firestore-backend gehaal te word nie, maar eerder 'n CDN en dus 'n paar kostes kan bespaar.

Maar hoekom? En belangriker, hoe ?!

"Firestore Data Bundles" is eintlik baie eenvoudig ontwerp:

  • u skep eers 'n "databundel" -verwysing in 'n bedieneromgewing via die Admin SDK
  • dan word hierdie bundel gelaai met standaard Firestore-navrae
  • wat u dan het, is 'n buffer van hierdie data wat byvoorbeeld as 'n lêer of in u CDN gestoor kan word
  • om na u kliënt se kant oor te skakel, alles wat nou oorbly met behulp van die nuwe Firestore API om die bundel van u CDN te laai
// 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.
}

Die voordeel van so 'n databundel word duideliker as u na 'n voorbeeld kyk. Stel u voor dat u gereeld 'n standaard stel waardes vir 'n nuwe dokument in u Firestore gebruik, byvoorbeeld wanneer u 'n nuwe gebruiker skep. In plaas daarvan om direk uit die databasis te haal, kan u nou 'Firestore Data Bundles' gebruik om hierdie waardes as 'n kas-dokument van u CDN te laai, en vermy enige koste wat verband hou met 'n Firestore-navraag.

Hierdie nuwe funksie is dus die beste geskik vir dokumente wat aan die volgende vereistes voldoen: die data verander nie gereeld nie, die aantal dokumente is nie baie groot nie en baie ophaal vir hierdie datastel sal gereeld voorkom.

Nog 'n werklike wêreldvoorbeeld

As 'n ideale gebruiksgeval, kan u ook hierdie progressiewe web-app as voorbeeld neem. Alle vertaalde tekste word in 'n Firestore-instansie gestoor, sowel as die URL-verwysings na alle klanklêers. Omdat hierdie data nie veel verander nie, is dit baie goed om in Firebase Storage of my CDN geberg te word. Dit kan my Firestore-kostes aansienlik verlaag.

"Firestore Data Bundles" is 'n baie goeie toevoeging tot Firebase. Dit dek miskien nie tans u gebruiksgevalle nie, maar kan baie nuttig wees as u diens begin groei.