Definiowanie zakresu transakcji IndexedDB

Co to jest IndexedDB?

IndexedDB to rozwijający się internetowy standard przechowywania dużych ilości uporządkowanych danych w przeglądarce oraz wysokiej wydajności wyszukiwania tych danych za pomocą indeksów. Inaczej mówiąc, IndexedDB to magazyn obiektów. Różni się ona od relacyjnej bazy danych, która zawiera tabele z wierszami i kolumnami kolekcji. Jest to istotna i zasadnicza różnica, która wpływa na sposób projektowania i tworzenia aplikacji (więcej o podstawowych pojęciach).

Co nowego?

Zmieniają się moi znajomi... Mamy pewne zmiany, które będą generować błędy, jeśli nie wykorzystujemy ich do wprowadzenia prostej zmiany składni.

Od wersji 17 Chrome będzie teraz zgłaszać błąd, jeśli transakcja IndexedDB nie jest ograniczona do magazynu obiektów. Ponieważ odczyt i zapis danych odbywa się w ramach transakcji, musimy utworzyć transakcję w bazie danych, określić zakres (np. do których magazynów obiektów chcesz uzyskać dostęp) i rodzaj dostępu (tylko do odczytu lub do zapisu).

Co to oznacza w kodzie? Zamiast przekazywać pustą tablicę do naszej bazy danych.transaction:

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

Zakres powinien obejmować konkretną bazę obiektów lub listę magazynów obiektów:

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

Możesz przyspieszyć dostęp do danych, wybierając w transakcji odpowiedni zakres i tryb. Oto kilka wskazówek: Podczas definiowania zakresu określ tylko potrzebne magazyny obiektów. Dzięki temu możesz jednocześnie przeprowadzać wiele transakcji z niepokrywającymi się zakresami. Tryb transakcji READ_WRITE określaj tylko wtedy, gdy jest to konieczne. Możesz jednocześnie przeprowadzić wiele transakcji READ_ONLY o pokrywających się zakresach, ale dla magazynu obiektów możesz mieć tylko 1 transakcję READ_WRITE.

Inne źródła:

Do następnego razu.