Bereich in IndexedDB-Transaktionen definieren

Was ist IndexedDB?

IndexedDB ist ein sich entwickelnder Webstandard zum Speichern großer Mengen strukturierter Daten im Browser und für leistungsstarke Suchanfragen in diesen Daten mithilfe von Indexen. Mit anderen Worten: IndexedDB ist ein Objektspeicher. Sie unterscheidet sich von einer relationalen Datenbank, die Tabellen mit Sammlungszeilen und ‑spalten enthält. Dies ist ein wichtiger und grundlegender Unterschied, der sich auf die Art und Weise auswirkt, wie Sie Ihre Anwendungen entwerfen und erstellen. Weitere Informationen finden Sie unter Grundlegende Konzepte.

Was ist neu?

Es gibt einige Änderungen, die zu Fehlern führen, wenn wir sie nicht durch eine einfache Syntaxänderung beheben.

Ab Version 17 wirft Chrome jetzt einen Fehler, wenn eine IndexedDB-Transaktion nicht auf einen Objektspeicher beschränkt ist. Da alle Lese- und Schreibvorgänge in Transaktionen ausgeführt werden, müssen wir eine Transaktion in einer Datenbank erstellen, den Umfang angeben (z. B. auf welche Objektspeicher Sie zugreifen möchten) und die Art des Zugriffs festlegen (Lesezugriff oder Schreibzugriff).

Was bedeutet das im Code? Anstatt unserer database.transaction ein leeres Array zu übergeben:

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

Sie sollten den Umfang auf einen bestimmten Objektspeicher oder eine Liste von Objektspeichern beschränken:

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

Sie können den Datenzugriff beschleunigen, indem Sie in der Transaktion den richtigen Umfang und Modus verwenden. Hier einige Tipps: Bei der Definition des Umfangs geben Sie nur die Objektspeicher an, die Sie benötigen. So können Sie mehrere Transaktionen mit nicht überlappenden Bereichen gleichzeitig ausführen. Geben Sie nur bei Bedarf einen READ_WRITE-Transaktionsmodus an. Sie können mehrere READ_ONLY-Transaktionen mit sich überschneidenden Bereichen gleichzeitig ausführen. Für einen Objektspeicher kann jedoch nur eine READ_ONLY-Transaktion ausgeführt werden.READ_WRITE

Andere Quellen:

Bis zum nächsten Mal…