SQLite Wasm, ऑरिजिनल निजी फ़ाइल सिस्टम के साथ काम करता है. यह वेब एसक्यूएल डेटाबेस टेक्नोलॉजी की जगह ले सकता है. इस लेख में, अपने डेटा को Web SQL से SQLite Wasm पर माइग्रेट करने का तरीका बताया गया है.
ज़रूरी बैकग्राउंड
Web SQL को बंद करना और हटाना पोस्ट में, Web SQL डेटाबेस टेक्नोलॉजी के बंद होने का एलान किया गया था. इस टेक्नोलॉजी का इस्तेमाल अब नहीं किया जा सकता. हालांकि, इस टेक्नोलॉजी के इस्तेमाल के उदाहरण अब भी काम के हैं. इसलिए, ब्राउज़र में SQLite Wasm, जो Origin के निजी फ़ाइल सिस्टम के साथ काम करता है पोस्ट में, SQLite डेटाबेस के आधार पर, टेक्नोलॉजी के बदले इस्तेमाल किए जा सकने वाले सेट के बारे में बताया गया है. यह डेटाबेस, वेब असेंबली (Wasm) में कंपाइल किया गया है और Origin के निजी फ़ाइल सिस्टम के साथ काम करता है. इस लेख में, डेटाबेस को Web SQL से SQLite Wasm पर माइग्रेट करने का तरीका बताया गया है.
डेटाबेस माइग्रेट करना
यहां दिए गए चार चरणों में, वेब एसक्यूएल डेटाबेस को SQLite Wasm पर माइग्रेट करने के बारे में बताया गया है. इसमें, SQLite डेटाबेस को ऑरिजिनल निजी फ़ाइल सिस्टम से बैकअप किया गया है. यह आपकी वेब एसक्यूएल माइग्रेशन की ज़रूरतों के हिसाब से बनाए गए कोड के लिए बुनियाद के तौर पर काम कर सकता है.
वेब एसक्यूएल के ऐसे डेटाबेस जिन्हें माइग्रेट करना है
माइग्रेशन गाइड के आधार पर यह माना जाता है कि आपके पास एक या उससे ज़्यादा वेब SQL डेटाबेस मौजूद हैं, जिनमें आपके ऐप्लिकेशन से जुड़ा डेटा सेव है. नीचे दिए गए स्क्रीनशॉट में, mydatabase नाम का एक डेटाबेस का उदाहरण दिया गया है. इसमें बारिश की टेबल है, जो मौसम की स्थिति को बारिश की तीव्रता के हिसाब से मैप करती है. Chrome DevTools की मदद से, डीबग करने के लिए Web SQL डेटाबेस देखे जा सकते हैं. इसकी जानकारी नीचे दिए गए स्क्रीनशॉट में दी गई है.
Web SQL डेटाबेस को SQL स्टेटमेंट में बदलना
डेटा को उपयोगकर्ता के लिए पारदर्शी तरीके से माइग्रेट करने के लिए, डेटाबेस में मौजूद डेटा के हिस्सों को उन ओरिजनल SQL स्टेटमेंट में वापस अनुवाद करना होगा जिनसे उन्हें बनाया गया था. इससे, उपयोगकर्ता को माइग्रेशन के किसी भी चरण को खुद पूरा करने की ज़रूरत नहीं पड़ती. यह समस्या पहले भी आ चुकी है. इस लेख में इस्तेमाल की गई माइग्रेशन स्क्रिप्ट—mywebsqldump.js
—websqldump.js
नाम की कम्यूनिटी लाइब्रेरी पर आधारित है. इसमें कुछ छोटे बदलाव किए गए हैं. यहां दिए गए कोड सैंपल में, वेब एसक्यूएल डेटाबेस mydatabase को SQL स्टेटमेंट के सेट में बदलने के लिए ज़रूरी कोड दिखाया गया है.
websqldump.export({
database: 'mydatabase',
version: '1.0',
success: function(sql) {
// The SQL statements.
},
error: function(err) {
// Handle the error.
}
});
इस कोड को चलाने पर, नीचे दी गई SQL स्टेटमेंट स्ट्रिंग दिखती है.
CREATE TABLE IF NOT EXISTS rainstorms (mood text, severity int);
INSERT INTO rainstorms(mood,severity) VALUES ('somber','6');
INSERT INTO rainstorms(mood,severity) VALUES ('rainy','8');
INSERT INTO rainstorms(mood,severity) VALUES ('stormy','2');
SQLite Wasm में डेटा इंपोर्ट करना
अब बस इन SQL कमांड को SQLite Wasm के संदर्भ में लागू करना बाकी है. SQLite Wasm को सेट अप करने के बारे में पूरी जानकारी के लिए, Origin के निजी फ़ाइल सिस्टम की मदद से ब्राउज़र में SQLite Wasm लेख पढ़ें. हालांकि, इसकी खास जानकारी यहां दी गई है. ध्यान रखें कि इस कोड को किसी वर्कर्स में चलाना ज़रूरी है. यह वर्कर्स, लाइब्रेरी आपके लिए अपने-आप बनाती है. साथ ही, इसमें ज़रूरी एचटीटीपी हेडर सही तरीके से सेट होने चाहिए. npm से @sqlite.org/sqlite-wasm
पैकेज इंस्टॉल किया जा सकता है.
import { sqlite3Worker1Promiser } from '@sqlite.org/sqlite-wasm';
(async () => {
try {
const promiser = await new Promise((resolve) => {
const _promiser = sqlite3Worker1Promiser({
onready: () => {
resolve(_promiser);
},
});
});
let response;
response = await promiser('open', {
filename: 'file:mydatabase.db?vfs=opfs',
});
const { dbId } = response;
const sql = `
CREATE TABLE IF NOT EXISTS rainstorms (mood text, severity int);
INSERT INTO rainstorms(mood,severity) VALUES ('somber','6');
INSERT INTO rainstorms(mood,severity) VALUES ('rainy','8');
INSERT INTO rainstorms(mood,severity) VALUES ('stormy','2');`
await promiser('exec', { dbId, sql });
await promiser('close', { dbId });
} catch (err) {
if (!(err instanceof Error)) {
err = new Error(err.result.message);
}
console.error(err.name, err.message);
}
})();
इस कोड को चलाने के बाद, OPFS एक्सप्लोरर Chrome DevTools एक्सटेंशन की मदद से, इंपोर्ट की गई डेटाबेस फ़ाइल की जांच करें. अब दो फ़ाइलें हैं, एक में असल डेटाबेस है और दूसरी में जर्नलिंग की जानकारी है. ध्यान दें कि ये दोनों फ़ाइलें, ओरिजिनल निजी फ़ाइल सिस्टम में मौजूद होती हैं. इसलिए, इन्हें देखने के लिए आपको OPFS एक्सप्लोरर एक्सटेंशन का इस्तेमाल करना होगा.
इंपोर्ट किए गए डेटा और शुरुआती वेब SQL डेटा की पुष्टि करने के लिए, फ़ाइल mydatabase.db
पर क्लिक करें. इसके बाद, OPFS एक्सप्लोरर एक्सटेंशन आपको फ़ाइल सेव करें डायलॉग दिखाएगा. इसकी मदद से, फ़ाइल को उपयोगकर्ता के लिए दिखने वाले फ़ाइल सिस्टम में सेव किया जा सकता है. डेटाबेस फ़ाइल सेव होने के बाद, डेटा को एक्सप्लोर करने के लिए SQLite व्यूअर ऐप्लिकेशन का इस्तेमाल करें. Project Fugu API Showcase में, ब्राउज़र में SQLite के साथ काम करने के लिए कई ऐप्लिकेशन मौजूद हैं. उदाहरण के लिए, Sqlime — SQLite Playground की मदद से, अपनी हार्ड डिस्क से SQLite डेटाबेस फ़ाइल खोली जा सकती है और डेटाबेस पर क्वेरी चलाई जा सकती हैं. जैसा कि नीचे दिए गए स्क्रीनशॉट में देखा जा सकता है, बारिश की टेबल को SQLite में सही तरीके से इंपोर्ट किया गया है.
Web SQL का स्टोरेज खाली करना
वेब एसक्यूएल डेटाबेस को मिटाना शायद आपको आश्चर्यजनक लगे, लेकिन यह मुमकिन नहीं है. हालांकि, डेटा को SQLite Wasm में माइग्रेट करने के बाद, अब काम न करने वाली वेब एसक्यूएल टेबल को हटाकर, कुछ स्टोरेज खाली किया जा सकता है. वेब एसक्यूएल डेटाबेस में सभी टेबल की सूची बनाने और उन्हें JavaScript का इस्तेमाल करके ड्रॉप करने के लिए, नीचे दिए गए स्निपेट में दिए गए कोड का इस्तेमाल करें:
const dropAllTables = () => {
try {
db.transaction(function (tx) {
tx.executeSql(
"SELECT name FROM sqlite_master WHERE type='table' AND name !='__WebKitDatabaseInfoTable__'",
[],
function (tx, result) {
const len = result.rows.length;
const tableNames = [];
for (let i = 0; i < len; i++) {
const tableName = result.rows.item(i).name;
tableNames.push(`'${tableName}'`);
db.transaction(function (tx) {
tx.executeSql('DROP TABLE ' + tableName);
});
}
console.log(`Dropped table${tableNames.length > 1 ? 's' : ''}: ${tableNames.join(', ')}.`);
}
);
});
} catch (err) {
console.error(err.name, err.message);
}
};
माइग्रेशन के बाद डेटा के साथ काम करना
डेटा को माइग्रेट करने के बाद, शुरू करने के लिए कोड का सैंपल में बताए गए तरीके से डेटा का इस्तेमाल करें. ज़्यादा जानकारी के लिए, SQLite Wasm API का रेफ़रंस देखें. आपको यह याद दिलाना है कि अगर स्टोरेज के बैकएंड के तौर पर, ऑरिजिन प्राइवेट फ़ाइल सिस्टम का इस्तेमाल किया जाता है, तो आपको Worker से SQLite Wasm को ऐक्सेस करना होगा.
इसे आज़माएं
इस डेमो की मदद से, वेब एसक्यूएल डेटाबेस में सैंपल डेटा डाला जा सकता है. इसके बाद, वेब एसक्यूएल डेटा को एसक्यूएल स्टेटमेंट के तौर पर डंप किया जाता है. इसके बाद, इसे ऑरिजिनल निजी फ़ाइल सिस्टम की मदद से, SQLite Wasm में इंपोर्ट किया जाता है. आखिर में, पुराने वेब एसक्यूएल डेटा को मिटाकर, स्टोरेज खाली किया जाता है. पूरी तरह से लागू करने के लिए, सोर्स कोड देखें. इसमें पैच की गई mywebsqldump.js
फ़ाइल भी शामिल है.
मीटिंग में सामने आए नतीजे
अपने वेब एसक्यूएल डेटाबेस को, ऑरिजिनल निजी फ़ाइल सिस्टम के साथ काम करने वाले SQLite Wasm पर माइग्रेट किया जा सकता है. ऐसा करने पर, उपयोगकर्ताओं को कोई परेशानी नहीं होती. उन्हें पता नहीं चलेगा कि उनका डेटा अब ऑरिजिनल निजी फ़ाइल सिस्टम में SQLite डेटाबेस में होस्ट किया जा रहा है और अब वेब SQL में नहीं है. कुल मिलाकर, वेब SQL से SQLite पर माइग्रेट करना, वेब डेवलपर के लिए ज़रूरी कदम है. इससे वे अपने ऐप्लिकेशन के लंबे समय तक काम करने और स्केल करने की सुविधा को पक्का कर सकते हैं. इस प्रोसेस में शुरुआत में थोड़ी मेहनत की ज़रूरत पड़ सकती है. हालांकि, बेहतर, आसान, और सबसे अहम बात यह है कि आने वाले समय में भी काम करने वाले डेटाबेस सलूशन के फ़ायदे, इस प्रोसेस में किए गए निवेश के हिसाब से सही हैं.