फायरस्टोर डेटा बंडल

कैश्ड फायरस्टोर दस्तावेज़ों के लिए एक नया कार्यान्वयन

फायरस्टोर अभी बेहतर हुआ

फायरबेस फायरस्टोर हाल ही में बढ़ाया गया है और अब "फायरस्टोर डेटा बंडल" नामक एक नई सुविधा लागू करता है। इसकी मूल अवधारणा यह है कि फायरस्टोर प्रश्नों को अब बाइनरी प्रारूप में पैक किया जा सकता है और आपके सीडीएन या अन्य होस्टिंग समाधान के माध्यम से परोसा जा सकता है। प्रभावी रूप से इसका मतलब है कि आपके डेटा का एक निश्चित समूह सीधे फायरस्टोर बैकएंड से प्राप्त नहीं होने के लिए उपयुक्त हो सकता है, बल्कि एक सीडीएन है और इस प्रकार आपको कुछ लागत बचा सकता है।

लेकिन क्यों? और अधिक महत्वपूर्ण, कैसे?!

"फायरस्टोर डेटा बंडल" वास्तव में वास्तव में सरल डिज़ाइन किए गए हैं:

  • आप पहले एक "डेटा बंडल" बनाते हैं - व्यवस्थापक एसडीके के माध्यम से सर्वर वातावरण में संदर्भ
  • फिर, यह बंडल मानक फायरस्टोर प्रश्नों के साथ लोड हो जाता है
  • फिर आपके पास इस डेटा का एक बफर है जिसे फ़ाइल के रूप में संग्रहीत किया जा सकता है, उदाहरण के लिए, या आपके सीडीएन में
  • अपने ग्राहक पक्ष पर स्विच करना, जो अब आपके सीडीएन से बंडल को लोड करने के लिए नए फायरस्टोर एपीआई का उपयोग करके बचा हुआ है
// 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.
}

ऐसे डेटा बंडल का लाभ एक उदाहरण को देखने पर स्पष्ट हो जाता है। कल्पना कीजिए कि आप अक्सर अपने फायरस्टोर में एक नए दस्तावेज़ के लिए मूल्यों के डिफ़ॉल्ट सेट का उपयोग करते हैं, उदाहरण के लिए एक नया उपयोगकर्ता बनाते समय। सीधे डेटाबेस से लाने के बजाय, अब आप इन मानों को अपने सीडीएन से कैश्ड दस्तावेज़ के रूप में लोड करने के लिए "फ़ायरस्टोर डेटा बंडल" का उपयोग कर सकते हैं, किसी भी फायरस्टोर-क्वेरी से जुड़ी किसी भी लागत से बच सकते हैं।

इसलिए यह नई सुविधा उन दस्तावेज़ों के लिए सबसे उपयुक्त है जो निम्नलिखित आवश्यकताओं के अनुरूप हैं: डेटा अक्सर नहीं बदलता है, दस्तावेज़ों की संख्या बहुत बड़ी नहीं है और इस डेटा सेट के लिए कई फ़ेच अक्सर होंगे।

एक और वास्तविक दुनिया का उदाहरण

शायद एक आदर्श उपयोग के मामले के रूप में, आप इस प्रगतिशील वेब ऐप को एक उदाहरण के रूप में भी ले सकते हैं। सभी अनुवादित पाठ एक फायरस्टोर इंस्टेंस में संग्रहीत किए जाते हैं, साथ ही सभी ऑडियो फाइलों के यूआरएल-संदर्भ भी। क्योंकि यह डेटा ज्यादा नहीं बदलता है, अगर बिल्कुल भी, यह फायरबेस स्टोरेज या मेरे सीडीएन में कैश किए जाने के लिए बहुत उपयुक्त है। यह संभावित रूप से मेरी फायरस्टोर लागत को काफी कम कर सकता है।

"फायरस्टोर डेटा बंडल" फायरबेस के लिए एक बहुत अच्छा अतिरिक्त है। वे अभी के लिए आपके उपयोग के मामलों को कवर नहीं कर सकते हैं, लेकिन जब आपकी सेवा बढ़ने लगती है तो वे बहुत उपयोगी हो सकते हैं।

सुझाव

संबंधित

परिशिष्ट

भाषाएँ