Die Indexed Database API, kurz IndexedDB, ist eine Programmierschnittstelle, die es Webseiten mittels JavaScript erlaubt, strukturierte Daten im Browser zu speichern. Der Standard wird vom World Wide Web Consortium entwickelt und ist in Browsern ab 2011 implementiert.
In einer Datenbank IndexedDB können Webseiten dauerhaft Daten vom Nutzer beim Nutzer speichern und auslesen. Dabei steht jeder Domain ein eigener Speicherbereich zur Verfügung, ein Zugriff auf die von einer anderen Domain gespeicherten Daten ist gemäß der Same-Origin-Policy nicht vorgesehen. Wie groß der verfügbare Speicher ist, hängt vom Browser ab, üblicherweise gibt es eine feste Grenze, die nicht überschritten werden kann, und eine weiche, ab der der Benutzer der Speicherung vorher zustimmen muss.[1] Die Speicherung erfolgt prinzipiell dauerhaft, Browser bieten jedoch ihren Benutzern die Möglichkeit, gespeicherte Daten zu löschen.[2]
Die Datenbank ist eine Objektdatenbank, in der Regel werden JavaScript-Objekte gespeichert, wobei einer der Einträge als Schlüssel dient, über den die Daten wieder abgefragt werden können. Auch für andere Einträge der gespeicherten Objekte können Indizes angelegt werden um eine effiziente Suche zu ermöglichen.
Der Zugriff auf die Datenbank erfolgt asynchron: Der Client stellt eine Anfrage und registriert Callback-Funktionen. Sobald das Ergebnis der Anfrage feststeht, wird er über entsprechende Ereignisse darüber informiert, dabei werden im Erfolgsfall die angefragten Daten mitgeliefert, im Falle eines Fehlers der Grund. Beim Zugriff werden Transaktionen eingesetzt um konsistente Daten auch dann zu gewährleisten, wenn beispielsweise durch zwei gleichzeitig geöffnete Tabs mehrere unabhängige Zugriffe auf die Datenbank erfolgen.
Die genaue Implementierung der Datenbank ist nicht festgelegt, es bietet sich jedoch ein B-Baum an. Alle modernen Browser unterstützen den Standard, da dieser jedoch laufend weiterentwickelt wird, nicht immer in der aktuellen Version. In den Browsern von Microsoft ist die Schnittstelle nur teilweise implementiert.[2] Bei älteren Browserversionen ist die API teilweise noch mit einem Herstellerpräfix versehen.[3]
Web Storage ist eine wesentlich einfachere Alternative zum Speichern von Daten. Diese bietet aber weniger Funktionen.
Ein alternativer Standard, der eine Datenbank zur Verfügung stellt, die sich über SQL abfragen lässt, war die Web SQL Database. Dieser Standard wurde allerdings nur in wenigen Browsern implementiert, sodass seine Weiterentwicklung zu Gunsten der IndexedDB eingestellt wurde.[4]
Heute aktuell ist die PouchDB, die graphbasierte GunDB, sowie die reaktive RxDB[5] und viele andere JavaScript Datenbanken, sowie andere Lösungen wie die Hood.ie Bibliothek.
Für ältere Browser kann die IndexedDB mittels Polyfills simuliert werden.[6]
Wie auch Web Storage ermöglicht diese dauerhafte Speicherung im Browser-Profil jeder Website, wiederkehrende Besuche vom selben Endgerät zu erkennen und unterschiedliche Nutzungsprofile zusammenzuführen.