Dzięki SQLite Wasm obsługiwanej przez prywatny system plików pochodzenia istnieje wszechstronny zamiennik wycofanej technologii bazy danych Web SQL. Ten artykuł zawiera przewodnik po migracji danych z Web SQL do SQLite Wasm.
Wymagane tło
W poście Wycofanie i usunięcie bazy danych Web SQL ogłosiliśmy wycofanie technologii bazy danych Web SQL. Chociaż sama technologia może być przestarzała, przypadki użycia, które obsługuje, wciąż są aktualne. Dlatego w kolejnym poście SQLite Wasm w przeglądarce z obsługą systemu plików prywatnych pochodzenia opisujemy zestaw technologii zastępczych opartych na bazie danych SQLite skompilowanej do WebAssembly (Wasm) i obsługiwanej przez system plików prywatnych pochodzenia. Aby zamknąć ten cykl, w tym artykule pokazujemy, jak migrować bazy danych z Web SQL do SQLite Wasm.
Migracja baz danych
Poniższe 4 kroki pokazują koncepcję migracji bazy danych Web SQL do SQLite Wasm, w której baza danych SQLite jest obsługiwana przez prywatny system plików pochodzenia. Może to stanowić podstawę Twojego kodu dostosowanego do Twoich potrzeb związanych z migracją Web SQL.
Bazy danych Web SQL, które mają zostać przeniesione
W tym przewodniku po migracji zakładamy, że masz co najmniej 1 bazę danych Web SQL, która zawiera dane istotne dla Twojej aplikacji. Na zrzucie ekranu poniżej widać przykładową bazę danych o nazwie mydatabase z tabelą rainstorms, która przypisuje nastroje do ich intensywności. Narzędzia deweloperskie w Chrome umożliwiają wyświetlanie baz danych Web SQL na potrzeby debugowania, jak pokazano na zrzucie ekranu poniżej.
Przekształcanie bazy danych Web SQL w instrukcje SQL
Aby przenieść dane w sposób niewidoczny dla użytkownika, czyli bez konieczności wykonywania przez niego żadnych czynności związanych z migracją, elementy danych w bazie danych muszą zostać przetłumaczone z powrotem na oryginalne instrukcje SQL, które je utworzyły. Ten problem pojawił się już wcześniej, a skrypt migracji użyty w tym artykule – mywebsqldump.js
– jest oparty na bibliotece społecznościowej o nazwie websqldump.js
z niewielkimi zmianami. Poniższy przykładowy kod pokazuje kod wymagany do przetłumaczenia bazy danych Web SQL mydatabase na zestaw instrukcji SQL.
websqldump.export({
database: 'mydatabase',
version: '1.0',
success: function(sql) {
// The SQL statements.
},
error: function(err) {
// Handle the error.
}
});
Uruchomienie tego kodu spowoduje wyświetlenie ciągu instrukcji SQL poniżej.
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');
Importowanie danych do SQLite Wasm
Pozostało tylko wykonanie tych poleceń SQL w kontekście SQLite Wasm. Wszystkie szczegóły dotyczące konfigurowania SQLite Wasm znajdziesz w artykule SQLite Wasm w przeglądarce z obsługą Origin Private File System, ale najważniejsze informacje znajdziesz poniżej. Pamiętaj, że ten kod musi być uruchamiany w procesie roboczym (który biblioteka automatycznie tworzy), a wymagane nagłówki HTTP muszą być prawidłowo ustawione. Pakiet @sqlite.org/sqlite-wasm
możesz zainstalować z npm.
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);
}
})();
Po uruchomieniu tego kodu sprawdź zaimportowany plik bazy danych za pomocą rozszerzenia OPFS Explorer w Narzędziach deweloperskich w Chrome. Teraz są 2 pliki: jeden z rzeczywistą bazą danych, a drugi z informacjami o dziennikach. Pamiętaj, że te 2 pliki znajdują się w prywatnym systemie plików pochodzenia, więc aby je zobaczyć, musisz użyć rozszerzenia OPFS Explorer.
Aby sprawdzić, czy zaimportowane dane są takie same jak początkowe dane Web SQL, kliknij plik mydatabase.db
. Rozszerzenie OPFS Explorer wyświetli okno dialogowe Zapisz plik, w którym możesz zapisać plik w systemie plików widocznym dla użytkownika. Po zapisaniu pliku bazy danych użyj aplikacji do przeglądania SQLite, aby sprawdzić dane. W Project Fugu API Showcase znajdziesz kilka aplikacji do pracy z SQLite w przeglądarce. Na przykład Sqlime – SQLite Playground umożliwia otwarcie pliku bazy danych SQLite z dysku twardego i uruchamianie zapytań w tej bazie. Jak widać na zrzucie ekranu poniżej, tabela z danymi o burzy została prawidłowo zaimportowana do SQLite.
Zwalnianie miejsca na dane w Web SQL
Chociaż nie można usunąć bazy danych Web SQL (co może być zaskakujące), po przeniesieniu danych do SQLite Wasm warto zwolnić trochę miejsca, usuwając nieużywane już tabele Web SQL. Aby wyświetlić listę wszystkich tabel w bazie danych Web SQL i usunąć je za pomocą JavaScriptu, użyj kodu jak w tym fragmencie:
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);
}
};
Praca z danymi po migracji
Po przeprowadzeniu migracji danych pracuj z nimi zgodnie z instrukcjami w tym przykładowym kodzie na początek. Szczegółowe informacje znajdziesz w dokumentacji interfejsu SQLite Wasm API. Przypominamy, że jeśli używasz prywatnego systemu plików pochodzenia jako backendu pamięci, musisz uzyskać dostęp do SQLite Wasm z poziomu procesu roboczego.
Podsumowanie
Migracja baz danych Web SQL do SQLite Wasm obsługiwanych przez prywatny system plików pochodzenia jest możliwa w sposób niewidoczny dla użytkowników. Nie zauważą, że ich dane są teraz hostowane w prywatnym systemie plików pochodzenia w bazie danych SQLite i nie znajdują się już w Web SQL. Ogólnie rzecz biorąc, migracja z Web SQL na SQLite jest niezbędnym krokiem dla deweloperów internetowych, którzy chcą zapewnić długoterminową stabilność i skalowalność swoich aplikacji. Chociaż ten proces może wymagać początkowego wysiłku, korzyści wynikające z bardziej niezawodnego, elastycznego i przede wszystkim przyszłościowego rozwiązania w zakresie baz danych sprawiają, że warto w nie zainwestować.