Web SQL'den SQLite Wasm'a: Veritabanı taşıma kılavuzu

Kaynak özel dosya sistemi tarafından desteklenen SQLite Wasm sayesinde, kullanımdan kaldırılan Web SQL veritabanı teknolojisinin çok yönlü bir alternatifi var. Bu makale, verilerinizi Web SQL'den SQLite Wasm'a taşımayla ilgili bir kılavuzdur.

Gerekli arka plan

Web SQL'in kullanımdan kaldırılması ve kaldırılması konulu gönderide, Web SQL veritabanı teknolojisinin kullanımdan kaldırılacağını duyurdu. Teknolojinin kendisi kullanımdan kaldırılmış olsa da teknolojinin ele aldığı kullanım alanları pek bir sorun teşkil etmemektedir. Bu nedenle, SQLite Wasm'ın tarayıcıdaki Origin Private File System tarafından desteklenen takip yayını, SQLite veritabanına dayalı, Web Assembly'de derlenen (Wasm) ve kaynak özel dosya sistemi tarafından desteklenen yedek bir teknoloji grubunu özetler. Süreci kapatmak için bu makalede veritabanlarının Web SQL'den SQLite Wasm'a nasıl taşınacağı gösterilmektedir.

Veritabanlarınızı taşıma

Aşağıdaki dört adım, bir Web SQL veritabanını kaynak özel dosya sistemi tarafından desteklenen SQLite veritabanına sahip SQLite Wasm'a taşımaya ilişkin kavramsal fikri göstermektedir. Bu, Web SQL taşıma ihtiyaçlarınız için özelleştirilmiş kendi kodunuz için temel oluşturabilir.

Taşınacak Web SQL veritabanları

Bu taşıma rehberinin temel varsayımıyla, uygulamanızla alakalı verileri barındıran bir (veya birkaç) mevcut Web SQL veritabanınız bulunur. Aşağıdaki ekran görüntüsünde, ruh hallerini şiddet dereceleriyle eşleştiren yağmur fırtınası tablosunu içeren mydatabase adlı örnek bir veritabanını görüyorsunuz. Chrome Geliştirici Araçları, aşağıdaki ekran görüntüsünde gösterildiği gibi hata ayıklama için Web SQL veritabanlarını görüntülemenize olanak tanır.

Chrome'un Geliştirici Araçları'nda incelenen Web SQL veritabanı. "Mydatabase" adlı bu veritabanı üç sütunlu bir tablo barındırır: satır kimliği, ruh hali ve önem derecesi. Üç satırlık örnek veri vardır.

Web SQL veritabanını SQL ifadelerine dönüştürme

Verileri kullanıcı açısından şeffaf bir şekilde taşımak için, yani kullanıcıların taşıma adımlarını kendilerinin yapmasına gerek kalmadan, veritabanındaki veri parçalarının en başta bunları oluşturan orijinal SQL ifadelerine geri çevrilmesi gerekir. Bu görev, daha önce karşılaştığımız bir sorundur. Bu makalede (mywebsqldump.js) kullanılan taşıma komut dosyası, websqldump.js adlı bir topluluk kitaplığını temel almaktadır ve bazı küçük düzenlemeler yapılmaktadır. Aşağıdaki kod örneğinde mydatabase adlı Web SQL veritabanını bir SQL ifadeleri kümesine çevirmek için gereken kod gösterilmektedir.

websqldump.export({
  database: 'mydatabase',
  version: '1.0',
  success: function(sql) {
    // The SQL statements.
  },
  error: function(err) {
    // Handle the error.
  }
});

Bu kod çalıştırıldığında aşağıdaki SQL ifadeleri dizesi oluşturulur.

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');
bulunan köşe durumlarıyla doğru şekilde ilgilenmesi için mywebsqldump.js öğesine daha fazla yama da uygulamanız gerekebilir.

Verileri SQLite Wasm'a aktarma

Geriye kalan tek şey bu SQL komutlarını SQLite Wasm bağlamında yürütmektir. SQLite Wasm'ı ayarlamayla ilgili tüm ayrıntılar için Kaynak Özel Dosya Sistemi tarafından desteklenen tarayıcıdaki SQLite Wasm adlı makaleyi inceleyin. Konuyla ilgili özet bilgiyi aşağıda bulabilirsiniz. Bu kodun, gerekli HTTP üstbilgileri ile doğru bir şekilde ayarlanmış bir Çalışanda (kitaplığın sizin için otomatik olarak oluşturduğu) çalışması gerektiğini unutmayın. @sqlite.org/sqlite-wasm paketini npm'den yükleyebilirsiniz.

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);
  }
})();

Bu kodu çalıştırdıktan sonra, içe aktarılan veritabanı dosyasını OPFS Explorer Chrome Geliştirici Araçları uzantısıyla inceleyin. Şu anda, biri gerçek veritabanını, diğeri günlük kaydı bilgilerini içeren iki dosya vardır. Bu iki dosyanın kaynak özel dosya sisteminde bulunduğunu, dolayısıyla bu dosyaları görmek için OPFS Gezgini uzantısını kullanmanız gerektiğini unutmayın.

Kaynak gizli dosya sistemini OPFS Explorer Chrome Geliştirici Araçları ile inceleme. Biri mydatabase.db, diğeri ise mydatabase.db-journal adlı iki dosya var.

İçe aktarılan verilerin ilk Web SQL verileriyle aynı olduğunu doğrulamak için dosyayı mydatabase.db tıklayın. OPFS Explorer uzantısı, dosyayı kullanıcının görebildiği dosya sistemine kaydetmenize olanak tanıyan bir Dosyayı Kaydet iletişim kutusu gösterir. Veritabanı dosyası kaydedildikten sonra verileri keşfetmek için bir SQLite görüntüleyici uygulaması kullanın. Project Fugu API Vitrini'nde tarayıcıda SQLite ile çalışmaya yönelik çeşitli uygulamalar bulunur. Örneğin Sqlime — SQLite Playground, sabit diskinizden SQLite veritabanı dosyasını açmanıza ve veritabanında sorgu çalıştırmanıza olanak tanır. Aşağıdaki ekran görüntüsünde görebileceğiniz gibi, yağmur fırtınası tablosu SQLite'a doğru şekilde aktarıldı.

Sqlime SQLite Playground aracında mydatabase.db dosyasını keşfetme. Uygulama, yağmur fırtınasından 10 tane çalıştırılmakta olan SQL sorgusu seçim yıldızı ile gösterilmektedir. Bunun sonucunda, Web SQL'deki ilk örnek veriden üç satır elde edilmiştir.

Web SQL depolama alanında yer açma

Bir Web SQL veritabanını silmek mümkün olmasa da (belki de şaşırtıcı bir şekilde) imkansız olsa da, verileri SQLite Wasm'a taşıdıktan sonra artık eski olan Web SQL tablolarını bırakarak depolama alanında yer açmanız gerekir. Web SQL veritabanındaki tüm tabloları listelemek ve JavaScript kullanarak bırakmak için aşağıdaki snippet'teki gibi kodu kullanın:

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);
  }
};

Taşıma işleminden sonra verilerle çalışma

Verileri taşıdıktan sonra, bu Başlangıç kod örneğinde belirtildiği şekilde verilerle çalışın. Ayrıntılar için SQLite Wasm API referansına bakın. Depolama arka ucunuz olarak kaynak özel dosya sistemini kullanırsanız bir Çalışandan SQLite Wasm'a erişmeniz gerektiğini tekrar hatırlatmak isteriz.

Test edin

Bu demo, Web SQL veritabanını örnek verilerle doldurmanıza, ardından Web SQL verilerini SQL ifadeleri olarak döküm etmenize olanak tanır. Bu veriler, daha sonra kaynak özel dosya sistemi tarafından desteklenen SQLite Wasm'a aktarılır. Son olarak, eski Web SQL verilerini silerek depolama alanında yer açarsınız. Yama uygulanmış mywebsqldump.js dosyası da dahil olmak üzere uygulamanın tamamı için kaynak kodu kontrol edin.

web-sql-to-sqlite-wasm.glitch.me adresindeki demo uygulaması.

Sonuçlar

Web SQL veritabanlarınızı kaynak özel dosya sistemi tarafından desteklenen SQLite Wasm'a taşımak, kullanıcılarınız açısından şeffaf bir şekilde mümkündür. Verilerinin artık bir SQLite veritabanındaki kaynak özel dosya sisteminde barındırıldığını ve artık Web SQL'de bulunmadığını fark etmez. Genel olarak Web SQL'den SQLite'a geçiş, uygulamalarının uzun vadeli kararlılığını ve ölçeklenebilirliğini sağlamak isteyen web geliştiricileri için gerekli bir adımdır. Süreç için ilk çaba gerekebilir. Ancak daha sağlam, esnek ve hepsinden önemlisi, geleceğe hazır olan veritabanı çözümünün avantajları yatırıma değiyor.