Firestore Veri Paketleri

Önbelleğe alınmış Firestore belgeleri için yeni bir uygulama

Firestore artık daha iyi

Firebase Firestore yakın zamanda geliştirildi ve şimdi "Firestore Veri Paketleri" adı verilen yeni bir özellik uyguluyor. Bunun temel konsepti, Firestore sorgularının artık ikili biçimde paketlenebilmesi ve CDN'niz veya diğer barındırma çözümünüz aracılığıyla sunulabilmesidir. Etkili bir şekilde bu, verilerinizin belirli bir grubunun doğrudan Firestore arka ucundan değil, bir CDN'den getirilmeye uygun olabileceği ve böylece size bazı maliyetlerden tasarruf edebileceği anlamına gelir.

Ama neden? Ve daha da önemlisi, nasıl?!

"Firestore Veri Paketleri" aslında gerçekten basit bir şekilde tasarlanmıştır:

  • önce Yönetici SDK'sı aracılığıyla bir sunucu ortamında bir "veri paketi" referansı oluşturursunuz
  • daha sonra bu paket standart Firestore sorgularıyla yüklenir
  • sahip olduğunuz şey, örneğin bir dosya olarak veya CDN'nizde saklanabilen bu verilerin bir arabelleğidir.
  • istemci tarafınıza geçiş yapın, artık paketi CDN'nizden yüklemek için yeni Firestore API'sini kullanarak geriye kalan tek şey
// 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.
}

Böyle bir veri paketinin faydası, bir örneğe bakıldığında daha açık hale gelmektedir. Örneğin yeni bir kullanıcı oluştururken, Firestore'unuzdaki yeni bir belge için sık sık varsayılan bir değer kümesi kullandığınızı düşünün. Doğrudan veritabanından almak yerine, artık bu değerleri CDN'nizden önbelleğe alınmış bir belge olarak yüklemek için "Firestore Veri Paketleri"ni kullanabilir ve bir Firestore sorgusu ile ilişkili maliyetlerden kaçınabilirsiniz.

Bu yeni özellik, bu nedenle, aşağıdaki gereksinimlere uyan belgeler için en uygunudur: veriler sık sık değişmez, belge sayısı çok fazla değildir ve bu veri kümesi için çok sayıda getirme sıklıkla gerçekleşir.

Başka bir gerçek dünya örneği

Belki ideal bir kullanım durumu olarak, bu ilerici web uygulamasını da örnek olarak alabilirsiniz. Çevrilen tüm metinler, tüm ses dosyalarına ilişkin URL referanslarının yanı sıra bir Firestore örneğinde depolanır. Bu veriler çok fazla değişmediğinden, hiç değilse, Firebase Storage veya benim CDN'mde önbelleğe alınmak için çok uygundur. Bu, Firestore maliyetlerimi önemli ölçüde azaltabilir.

"Firestore Veri Paketleri", Firebase'e çok hoş bir ektir. Şimdilik kullanım durumlarınızı kapsamayabilirler, ancak hizmetiniz büyümeye başladığında çok yardımcı olabilirler.