ब्राउज़र में SQLite Wasm, जो ऑरिजिन प्राइवेट फ़ाइल सिस्टम के साथ काम करता है

वेब पर स्टोरेज से जुड़ी अपनी सभी ज़रूरतों को पूरा करने के लिए, SQLite का इस्तेमाल करें.

SQLite के बारे में जानकारी

SQLite एक लोकप्रिय नाम है. ओपन-सोर्स, लाइटवेट, एम्बेड किया गया रिलेशनल डेटाबेस मैनेजमेंट सिस्टम. कई डेवलपर इसका इस्तेमाल इस्तेमाल में आसान हो. इसका साइज़ छोटा होने और मेमोरी कम होने की वजह से SQLite का इस्तेमाल अक्सर मोबाइल डिवाइसों में डेटाबेस इंजन के तौर पर किया जाता है. डेस्कटॉप ऐप्लिकेशन, और वेब ब्राउज़र होते हैं.

SQLite की एक मुख्य सुविधा यह है कि यह बिना सर्वर वाला डेटाबेस है, जो इसका मतलब है कि इसे ऑपरेट करने के लिए किसी अलग सर्वर प्रोसेस की ज़रूरत नहीं होती है. इसके बजाय, डेटाबेस को उपयोगकर्ता के डिवाइस पर एक फ़ाइल में सेव किया जाता है. इससे, ऐप्लिकेशन में इंटिग्रेट कर सकते हैं.

SQLite का लोगो.

वेब असेंबली पर आधारित SQLite

वेब असेंबली (Wasm) पर आधारित कई गैर-आधिकारिक SQLite वर्शन हैं, को वेब ब्राउज़र में इस्तेमाल करने की अनुमति देना, उदाहरण के लिए, sql.js पर भी लागू होगा. कॉन्टेंट बनाने sqlite3 WASM/JS सब-प्रोजेक्ट पहली कोशिश, जो आधिकारिक तौर पर SQLite प्रोजेक्ट, जिसमें Wasm की लाइब्रेरी बनाई जा रही है इसके साथ काम करने वाले SQLite पर डिलीवर किए जाने वाले कामों के परिवार के खास सदस्य. द कंक्रीट इस प्रोजेक्ट के लक्ष्यों में शामिल हैं:

  • किसी लो-लेवल sqlite3 API को बाइंड करना, जो C वाले एपीआई के जितना हो सकता है इस्तेमाल की शर्तें.
  • हाई-लेवल का ऑब्जेक्ट-ओरिएंटेड एपीआई, जो इससे ज़्यादा मिलता-जुलता है sql.js और Node.js-स्टाइल को लागू करना. यह सीधे तौर पर Low-level API से बात करता है. इस एपीआई का इस्तेमाल उसी एपीआई से किया जाना चाहिए थ्रेड को लो-लेवल एपीआई के तौर पर सबमिट करें.
  • वर्कर पर आधारित एपीआई, जो वर्कर मैसेज के ज़रिए पिछले एपीआई से बात करता है. यह यह नीति, लोअर लेवल एपीआई के साथ, मुख्य थ्रेड में इस्तेमाल करने के लिए है उपयोगकर्ता थ्रेड में इंस्टॉल किया गया है और कर्मचारी मैसेज के ज़रिए उनसे बात की जा रही है.
  • Worker API का प्रॉमिस-आधारित वैरिएंट, जो पूरी तरह से उपयोगकर्ता के क्रॉस-थ्रेड संचार के पहलू.
  • उपलब्ध JavaScript API का इस्तेमाल करके लगातार क्लाइंट-साइड स्टोरेज के लिए सहायता, इसमें ऑरिजिन प्राइवेट फ़ाइल सिस्टम (ओपीएफ़एस) भी शामिल है.

ऑरिजिन प्राइवेट फ़ाइल सिस्टम परसिस्टेंस बैकएंड के साथ SQLite Wasm का इस्तेमाल करना

एनपीएम से लाइब्रेरी इंस्टॉल करना

इंस्टॉल करें @sqlite.org/sqlite-wasm npm से निम्न आदेश वाला पैकेज:

npm install @sqlite.org/sqlite-wasm

ऑरिजिन प्राइवेट फ़ाइल सिस्टम

द ऑरिजिन प्राइवेट फ़ाइल सिस्टम (OPFS, जो File System Access API) को एक खास प्लैटफ़ॉर्म होता है, जो डेटा का बेहतर तरीके से ऐक्सेस देता है. यह नया प्लैटफ़ॉर्म यह मौजूदा ऐसेट से अलग होता है. इसमें, पहले से मौजूद टूल का इस्तेमाल करके, फ़ाइल की सामग्री. इस बदलाव से, अब कॉन्टेंट को लगातार पढ़ने की सुविधा मिलती है पहले से मौजूद डेटा में बदलाव नहीं करने होंगे. साथ ही, सिंक्रोनस वैरिएंट की उपलब्धता यह सेवा, खास तरीके से काम करने वाले लोगों की मदद करती है. यह परफ़ॉर्मेंस में काफ़ी सुधार करती है और नए इस्तेमाल को अनब्लॉक करती है मामले.

जैसा कि आप कल्पना कर सकते हैं, प्रोजेक्ट के लक्ष्यों का आखिरी बिंदु, उपलब्ध JavaScript API का इस्तेमाल करके स्थायी क्लाइंट-साइड स्टोरेज मिलता है. इसमें डेटा को डेटाबेस फ़ाइल में बनाए रखने के बारे में सख्त परफ़ॉर्मेंस की ज़रूरी शर्तें. यहां पर Origin Private File System, और खास तौर पर, createSyncAccessHandle() इसका तरीका FileSystemFileHandle चीज़ें काम करने लगती हैं. इस तरीके से ऐसा प्रॉमिस रिटर्न होता है जो FileSystemSyncAccessHandle ऑब्जेक्ट है जिसका इस्तेमाल किसी फ़ाइल से सिंक्रोनस रूप से पढ़ने और उस पर लिखने के लिए किया जा सकता है. कॉन्टेंट बनाने इस तरीके के सिंक्रोनस होने से परफ़ॉर्मेंस बेहतर होती है. इसे सिर्फ़ वहीं के लोग इस्तेमाल कर सकते हैं के लिए वेब वर्कर ऑरिजिन प्राइवेट फ़ाइल सिस्टम में मौजूद फ़ाइलें अपलोड की हैं, ताकि मुख्य थ्रेड को ब्लॉक न किया जा सके.

ज़रूरी हेडर सेट करना

दूसरी फ़ाइलों में, SQLite Wasm के डाउनलोड किए गए संग्रह में sqlite3.js शामिल है और sqlite3.wasm फ़ाइलें शामिल हैं, जो sqlite3 WASM/JS बिल्ड बनाती हैं. jswasm डायरेक्ट्री में, sqlite3 के डिलीवर किए जाने वाले मुख्य और टॉप-लेवल की डायरेक्ट्री शामिल है में डेमोग्राफ़िक और टेस्ट ऐप्लिकेशन होते हैं. ब्राउज़र, Wasm फ़ाइलें नहीं दिखाएंगे file:// यूआरएल हैं, इसलिए इसके साथ बनाए गए किसी भी ऐप्लिकेशन के लिए वेब सर्वर की ज़रूरत होती है और सर्वर को अपनी साइट पर, फ़ाइलें:

  • Cross-Origin-Opener-Policy इस पर सेट किया गया same-origin डायरेक्टिव, यह सुविधा, ब्राउज़िंग कॉन्टेक्स्ट को खास तौर पर एक ही ऑरिजिन वाले दस्तावेज़ों के लिए आइसोलेट करती है. क्रॉस-ऑरिजिन दस्तावेज़ एक ही ब्राउज़िंग कॉन्टेक्स्ट में लोड नहीं किए जाते हैं.
  • Cross-Origin-Embedder-Policy इस पर सेट किया गया require-corp डायरेक्टिव, इसलिए, कोई दस्तावेज़ सिर्फ़ एक ही ऑरिजिन या रिसॉर्स से जुड़े रिसॉर्स लोड कर सकता है जिसे किसी अन्य ऑरिजिन से, लोड करने लायक के तौर पर मार्क किया गया है.

इन हेडर की वजह यह है कि SQLite Wasm इस पर निर्भर करता है SharedArrayBuffer और इन हेडर को सेट करना इसका हिस्सा है सुरक्षा से जुड़ी ज़रूरी शर्तें शामिल हैं.

DevTools की मदद से ट्रैफ़िक की जांच करने पर, आपको ये नतीजे मिलेंगे जानकारी:

ऊपर बताए गए दो हेडर, Cross-Origin-Embedder-Policy और Cross-Origin-Opener-Policy को Chrome DevTools में हाइलाइट किया गया है.

स्पीड टेस्ट

SQLite टीम ने WebAssembly लागू करने के लिए, कुछ मानदंड पूरे किए हैं . ये मानदंड दिखाते हैं कि SQLite Wasm यह वेब एसक्यूएल जितनी तेज़ी से काम करता है. कभी-कभी यह थोड़ा धीमा होता है तो वह थोड़ा तेज़ हो गया. पूरी जानकारी के लिए यहां देखें: नतीजों वाले पेज पर जाएं.

शुरुआत करने के लिए कोड सैंपल

जैसा कि पहले बताया जा चुका है, Origin Private File System के साथ SQLite Wasm परसिस्टेंस बैकएंड को वर्कर के हिसाब से चलाना चाहिए. अच्छी बात यह है कि लाइब्रेरी आपके लिए इन सभी चीज़ों का अपने-आप ध्यान रखती है और आप इसका इस्तेमाल कर सकते हैं मुख्य थ्रेड से.

import { sqlite3Worker1Promiser } from '@sqlite.org/sqlite-wasm';

(async () => {
  try {
    console.log('Loading and initializing SQLite3 module...');

    const promiser = await new Promise((resolve) => {
      const _promiser = sqlite3Worker1Promiser({
        onready: () => {
          resolve(_promiser);
        },
      });
    });

    console.log('Done initializing. Running demo...');

    let response;

    response = await promiser('config-get', {});
    console.log('Running SQLite3 version', response.result.version.libVersion);

    response = await promiser('open', {
      filename: 'file:worker-promiser.sqlite3?vfs=opfs',
    });
    const { dbId } = response;
    console.log(
      'OPFS is available, created persisted database at',
      response.result.filename.replace(/^file:(.*?)\?vfs=opfs$/, '$1'),
    );

    await promiser('exec', { dbId, sql: 'CREATE TABLE IF NOT EXISTS t(a,b)' });
    console.log('Creating a table...');

    console.log('Insert some data using exec()...');
    for (let i = 20; i <= 25; ++i) {
      await promiser('exec', {
        dbId,
        sql: 'INSERT INTO t(a,b) VALUES (?,?)',
        bind: [i, i * 2],
      });
    }

    console.log('Query data with exec()');
    await promiser('exec', {
      dbId,
      sql: 'SELECT a FROM t ORDER BY a LIMIT 3',
      callback: (result) => {
        if (!result.row) {
          return;
        }
        console.log(result.row);
      },
    });

    await promiser('close', { dbId });
  } catch (err) {
    if (!(err instanceof Error)) {
      err = new Error(err.result.message);
    }
    console.error(err.name, err.message);
  }
})();

डेमो

डेमो में ऊपर दिए गए कोड को काम करते हुए देखें. खाता लिंक करने के लिए, सोर्स कोड ग्लिच पर. ध्यान दें कि नीचे दिया गया एम्बेड किया गया वर्शन, OPFS बैकएंड का इस्तेमाल कैसे नहीं करता, हालाँकि, डेमो खोलने पर अलग टैब में रखना चाहिए.

ऑरिजिन प्राइवेट फ़ाइल सिस्टम को डीबग करना

SQLite Wasm के ऑरिजिन प्राइवेट फ़ाइल सिस्टम आउटपुट को डीबग करने के लिए, ओपीएफ़एस एक्सप्लोरर Chrome एक्सटेंशन.

Chrome वेब स्टोर में OPFS एक्सप्लोरर.

एक्सटेंशन इंस्टॉल करने के बाद, Chrome DevTools खोलें और OPFS चुनें Explorer टैब पर क्लिक करें और फिर आप यह देखने के लिए तैयार हैं कि SQLite Wasm ने ऑरिजिन प्राइवेट फ़ाइल सिस्टम.

OPFS Explorer का Chrome एक्सटेंशन, जिसमें डेमो ऐप्लिकेशन के ऑरिजिन प्राइवेट फ़ाइल सिस्टम का स्ट्रक्चर दिखाया गया है.

DevTools में OPFS एक्सप्लोरर विंडो में मौजूद किसी भी फ़ाइल पर क्लिक करने पर, को डिवाइस की डिस्क में सेव कर सकता है. इसके बाद, आप इस तरह का ऐप्लिकेशन इस्तेमाल कर सकते हैं: SQLite Viewer का इस्तेमाल करके, डेटाबेस की जांच करें, ताकि आप खुद को भरोसा दिलाएं कि SQLite Wasm उम्मीद के मुताबिक काम करता है.

SQLite Viewer ऐप्लिकेशन का इस्तेमाल, SQLite Wasm के डेमो से डेटाबेस फ़ाइल को खोलने के लिए किया जाता है.

सहायता पाना और सुझाव/राय देना या शिकायत करना

SQLite Wasm को SQLite कम्यूनिटी ने बनाया है और वह इसका रखरखाव करता है. सहायता पाएं और में खोजकर और पोस्ट करके फ़ीडबैक दें सहायता फ़ोरम पर जाएं. पूरा दस्तावेज़ SQLite साइट पर उपलब्ध है.

स्वीकार की गई

इस इमेज में टोबायस फ़िशर ने अपनी हीरो इमेज अपलोड की है अनस्प्लैश.