IndexedDB API

注意:此功能在Web Workers中可用。

IndexedDB 是一个用于客户端存储大量结构化数据(包括文件/blob)的低级 API。此 API 使用索引来启用对这些数据的高性能搜索。虽然Web 存储适用于存储少量数据,但它不太适合存储大量结构化数据。IndexedDB 提供了一种解决方案。这是 MDN IndexedDB 覆盖范围的主着陆页 - 在这里,我们提供了指向完整 API 参考和使用指南、浏览器支持详细信息以及一些关键概念解释的链接。

关键概念和用法

IndexedDB 是一个事务性数据库系统,类似于基于 SQL 的关系数据库管理系统 (RDBMS)。但是,与使用固定列表的基于 SQL 的 RDBMS 不同,IndexedDB 是一个基于 JavaScript 的面向对象的数据库。IndexedDB 允许您存储和检索使用进行索引的对象;结构化克隆算法支持的任何对象都可以存储。您需要指定数据库模式,打开数据库连接,然后在一系列事务中检索和更新数据。

注意:与大多数 Web 存储解决方案一样,IndexedDB 遵循同源策略。因此,虽然您可以在域内访问存储的数据,但您无法跨不同域访问数据。

同步和异步

使用 IndexedDB 执行的操作是异步执行的,这样就不会阻塞应用程序。

存储限制和逐出标准

有许多 Web 技术在客户端(即您的本地磁盘上)存储各种类型的数据。IndexedDB 最常被谈论。浏览器确定为 Web 数据存储分配多少空间以及在达到该限制时删除哪些内容的过程并不简单,并且在不同浏览器之间有所不同。浏览器存储配额和逐出标准试图解释它是如何工作的,至少在 Firefox 的情况下是这样。

接口

要访问数据库,请在窗口对象的indexedDB属性上调用open()。此方法返回一个IDBRequest对象;异步操作通过在IDBRequest对象上触发事件来与调用应用程序通信。

连接到数据库

IDBFactory

提供对数据库的访问。此类型的对象是全局Window.indexedDBWorkerGlobalScope.indexedDB属性的值。因此,它是 API 的入口点。

IDBOpenDBRequest

表示打开数据库的请求。

IDBDatabase

表示与数据库的连接。它是获取数据库事务的唯一方式。

检索和修改数据

IDBTransaction

表示一个事务。您可以在数据库上创建一个事务,指定范围(例如您要访问哪些对象存储),并确定您想要的访问类型(只读或读写)。

IDBRequest

处理数据库请求并提供对结果访问的通用接口。

IDBObjectStore

表示一个对象存储,允许通过主键访问 IndexedDB 数据库中的一组数据。

IDBIndex

还允许访问 IndexedDB 数据库中的数据子集,但使用索引而不是主键检索记录。这有时比使用IDBObjectStore更快。

IDBCursor

迭代对象存储和索引。

IDBCursorWithValue

迭代对象存储和索引并返回游标的当前值。

IDBKeyRange

定义一个键范围,可用于在特定范围内从数据库中检索数据。

自定义事件接口

此规范使用以下自定义接口触发事件

IDBVersionChangeEvent

IDBVersionChangeEvent 接口指示数据库的版本已更改,这是IDBOpenDBRequest.onupgradeneeded事件处理程序函数的结果。

示例

规范

规范
Indexed Database API 3.0

另请参阅