Bereich in IndexedDB-Transaktionen definieren

Was ist IndexedDB?

IndexedDB ist ein sich weiterentwickelnder Webstandard zum Speichern großer Mengen strukturierter Daten im Browser und für Hochleistungssuchen dieser Daten mithilfe von Indexen. Mit anderen Worten, IndexedDB ist ein Objektspeicher. Es ist nicht dasselbe wie eine relationale Datenbank, die Tabellen mit Zeilen- und Spaltensammlungen enthält. Dies ist ein wichtiger und grundlegender Unterschied, der sich auf die Art und Weise auswirkt, wie Sie Ihre Anwendungen entwerfen und erstellen (mehr zu den grundlegenden Konzepten).

Was ist neu?

Verändert meine Freunde... Es gibt einige Änderungen, die einige Fehler verursachen werden, wenn wir sie nicht mit einer einfachen Syntaxänderung bearbeiten.

Ab Version 17 gibt Chrome jetzt einen Fehler aus, wenn eine IndexedDB-Transaktion keinem Objektspeicher zugeordnet ist. Da das Lesen und Schreiben von Daten innerhalb von Transaktionen erfolgen, müssen wir eine Transaktion für eine Datenbank erstellen, den Bereich festlegen (z. B. auf welchen Objektspeicher Sie zugreifen möchten) und die Art des Zugriffs festlegen (Lese- oder Schreibzugriff).

Was bedeutet das im Code? Anstatt ein leeres Array an unsere Datenbank.transaction zu übergeben:

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

Sie sollten den Bereich auf einen bestimmten Objektspeicher oder eine Liste von Objektspeichern festlegen:

// 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 den richtigen Bereich und Modus in der Transaktion verwenden. Hier einige Tipps: Geben Sie beim Definieren des Bereichs nur die erforderlichen Objektspeicher an. Auf diese Weise können Sie mehrere Transaktionen mit sich nicht überschneidenden 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 ist jedoch nur eine READ_WRITE-Transaktion möglich.

Weitere Quellen:

Bis zum nächsten Mal... treiben Sie das Web auf nahe gelegene Gebiete aus.