Πακέτα δεδομένων Firestore

Μια νέα εφαρμογή για προσωρινά αποθηκευμένα έγγραφα του Firestore

Το Firestore μόλις έγινε καλύτερο

Το Firebase Firestore βελτιώθηκε πρόσφατα και τώρα εφαρμόζει μια νέα λειτουργία που ονομάζεται "Firestore Data Bundles". Η βασική ιδέα είναι ότι τα ερωτήματα του Firestore μπορούν τώρα να συσκευαστούν σε δυαδική μορφή και να σερβιριστούν μέσω του CDN ή άλλης λύσης φιλοξενίας. Αποτελεσματικά αυτό σημαίνει ότι μια συγκεκριμένη ομάδα των δεδομένων σας μπορεί να είναι κατάλληλη για να μην ληφθεί απευθείας από το backend του Firestore, αλλά ένα CDN και έτσι μπορεί να σας εξοικονομήσει κάποιο κόστος.

Μα γιατί? Και πιο σημαντικό, πώς ;!

Το "Firestore Data Bundles" είναι πραγματικά απλό σχεδιασμένο:

  • δημιουργείτε πρώτα μια αναφορά «δέσμη δεδομένων» σε περιβάλλον διακομιστή μέσω του SDK διαχειριστή
  • Στη συνέχεια, αυτό το πακέτο φορτώνεται με τυπικά ερωτήματα Firestore
  • Αυτό που έχετε στη συνέχεια είναι ένα buffer αυτών των δεδομένων που μπορούν να αποθηκευτούν ως αρχείο, για παράδειγμα, ή στο CDN σας
  • μετάβαση στην πλευρά του πελάτη σας, όλα αυτά που απομένουν τώρα χρησιμοποιώντας το νέο API 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 Data Bundles" για να φορτώσετε αυτές τις τιμές ως προσωρινά αποθηκευμένο έγγραφο από το CDN σας, αποφεύγοντας τυχόν κόστος που σχετίζεται με ένα ερώτημα Firestore.

Επομένως, αυτή η νέα δυνατότητα ταιριάζει καλύτερα σε έγγραφα που συμμορφώνονται με τις ακόλουθες απαιτήσεις: τα δεδομένα δεν αλλάζουν συχνά, ο αριθμός των εγγράφων δεν είναι πολύ μεγάλος και συχνά πραγματοποιούνται πολλές ανακτήσεις για αυτό το σύνολο δεδομένων.

Ένα άλλο πραγματικό παράδειγμα

Ως ίσως μια ιδανική περίπτωση χρήσης, μπορείτε επίσης να χρησιμοποιήσετε αυτήν την προοδευτική εφαρμογή ιστού ως παράδειγμα. Όλα τα μεταφρασμένα κείμενα αποθηκεύονται σε μια παρουσία Firestore, καθώς και οι αναφορές URL σε όλα τα αρχεία ήχου. Επειδή αυτά τα δεδομένα δεν αλλάζουν πολύ, αν όχι καθόλου, ταιριάζει πολύ στο cache είτε στο Firebase Storage είτε στο CDN μου. Αυτό μπορεί δυνητικά να μειώσει σημαντικά το κόστος του Firestore.

Το "Firestore Data Bundles" είναι μια πολύ ωραία προσθήκη στο Firebase. Μπορεί να μην καλύπτουν τις περιπτώσεις χρήσης σας προς το παρόν, αλλά θα μπορούσαν να γίνουν πολύ χρήσιμες όταν η υπηρεσία σας αρχίσει να αυξάνεται.

Προτάσεις

Σχετικά

Προσάρτημα

Γλώσσες