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

IndexedDB とは

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

何が新しいのでしょうか

友人が変わってしまいました。単純な構文の変更で対処しないとエラーがスローされるような変更があります。

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

コードにおける意味 空の配列を 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 トランザクションを同時に実行できますが、1 つのオブジェクト ストアに対して設定できる READ_WRITE トランザクションは 1 つのみです。

その他のソース:

今後ともどうぞよろしくお願いいたします。