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

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

注意: IndexedDB API 功能强大,但对于简单的情况可能看起来过于复杂。如果您更喜欢简单的 API,请尝试另请参阅部分中的库,这些库使 IndexedDB 对程序员更友好。

关键概念和用法

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

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

同步和异步

使用 IndexedDB 执行的操作是异步完成的,以免阻塞应用程序。

存储限制和驱逐标准

有许多 Web 技术可以在客户端(即本地磁盘上)存储一种或另一种数据。IndexedDB 是最常被谈论的。浏览器计算出分配给 Web 数据存储的空间量以及达到该限制时要删除的内容的过程并不简单,并且在不同浏览器之间有所不同。浏览器存储限制和驱逐标准试图解释这是如何工作的,至少在 Firefox 中是这样。

接口

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

连接到数据库

IDBFactory
提供对数据库的访问。这是由全局对象实现的接口,indexedDB因此是 API 的入口点。
IDBOpenDBRequest
表示打开数据库的请求。
IDBDatabase
表示与数据库的连接。这是在数据库上获取事务的唯一方法。

检索和修改数据

IDBTransaction
表示交易。您在数据库上创建事务,指定范围(例如要访问的对象存储),并确定所需的访问类型(只读或读写)。
IDBRequest
处理数据库请求并提供对结果的访问的通用接口。
IDBObjectStore
表示允许访问 IndexedDB 数据库中的一组数据的对象存储,通过主键查找。
IDBIndex
还允许访问 IndexedDB 数据库中的数据子集,但使用索引来检索记录而不是主键。这有时比使用IDBObjectStore.
IDBCursor
迭代对象存储和索引。
IDBCursorWithValue
遍历对象存储和索引并返回游标的当前值。
IDBKeyRange
定义一个键范围,可用于从特定范围内的数据库中检索数据。
IDBLocaleAwareKeyRange 非标
定义一个键范围,可用于从特定范围内的数据库中检索数据,根据为特定索引指定的区域设置规则进行排序(请参阅createIndex()'s optionalParameters .)。此接口不是 2.0 规范的一部分。

自定义事件接口

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

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

例子

规格

规格
索引数据库 API 3.0

也可以看看

  • localForage:一个为客户端数据存储提供简单名称:值语法的 Polyfill,它在后台使用 IndexedDB,但在不支持 IndexedDB 的浏览器中回退到 Web SQL(已弃用)和 localStorage。
  • Dexie.js:IndexedDB 的包装器,通过漂亮、简单的语法允许更快的代码开发。
  • ZangoDB : IndexedDB 的类似 MongoDB 的接口,支持 MongoDB 的大多数熟悉的过滤、投影、排序、更新和聚合功能。
  • JsStore:具有类似 SQL 语法的 IndexedDB 包装器。
  • MiniMongo:一个客户端内存中的 mongodb,由 localstorage 支持,服务器通过 http 同步。MeteorJS 使用 MiniMongo。
  • PouchDB:使用 IndexedDB 在浏览器中实现 CouchDB 的客户端
  • idb:一个很小的(~1.15k)库,主要反映了 IndexedDB API,但有一些小的改进,对可用性有很大的影响。
  • idb-keyval:使用 IndexedDB 实现的基于承诺的超简单小型(~600B)keyval 存储
  • sifrr-storage:一个小的(~2kB)基于承诺的库,用于客户端键值存储。适用于 IndexedDB、localStorage、Web SQL(已弃用)、Cookie。可以根据优先级自动使用支持的可用存储。
  • lovefield:Lovefield 是一个用于 Web 应用程序的关系数据库。用 JavaScript 编写,跨浏览器工作。提供快速、安全且易于使用的类似 SQL 的 API。
  • $mol_db : 微型 (~1.3kB) TypeScript 外观,带有基于 Promise 的 API 和自动迁移。
  • RxDB可以在 IndexedDB 之上使用的 NoSQL 客户端数据库。支持索引、压缩和复制。还为 IndexedDB 添加了交叉表功能和可观察性。

IndexedDB API