IndexedDB トランザクションのスコープの定義

IndexedDB とは

IndexedDB は、ブラウザに大量の構造化データを保存し、インデックスを使用してこのデータを高パフォーマンスで検索するための、進化を続けるウェブ標準です。つまり、IndexedDB はオブジェクト ストアです。コレクションの行と列を持つテーブルがあるリレーショナル データベースとは異なります。これは、アプリの設計と構築方法に影響する重要な基本的な違いです(詳しくは、基本コンセプトをご覧ください)。

では、新機能について説明します。

変更がいくつかあります。簡単な構文変更で対応しないと、エラーが発生する可能性があります。

バージョン 17 以降の Chrome では、IndexedDB トランザクションがオブジェクト ストアにスコープ設定されていない場合、エラーがスローされるようになりました。データの読み取りと書き込みはすべてトランザクション内で行われるため、データベースにトランザクションを作成し、スコープ(アクセスするオブジェクト ストアなど)を指定し、アクセスの種類(読み取り専用または書き込み)を決定する必要があります。

コードで意味する空の配列を database.transaction に渡す代わりに、次のようにします。

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

特定のオブジェクト ストアまたはオブジェクト ストアのリストにスコープを設定する必要があります。

// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);

// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
    IDBTransaction.READ_ONLY);

// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);

トランザクションで適切なスコープとモードを使用すると、データアクセスを高速化できます。次のヒントを参考にしてください。スコープを定義する際は、必要なオブジェクト ストアのみを指定します。これにより、重複しないスコープを持つ複数のトランザクションを同時に実行できます。READ_WRITE トランザクション モードは、必要な場合にのみ指定します。重複するスコープを持つ複数の READ_ONLY トランザクションを同時に実行できますが、オブジェクト ストアに対して READ_WRITE トランザクションを実行できるのは 1 つだけです。

その他のソース:

それでは、次回まで... 近隣の地域にウェブを広めましょう。