indexeddbindexeddb入门


备注

本节概述了indexeddb是什么,以及开发人员可能想要使用它的原因。

它还应该提到indexeddb中的任何大型主题,并链接到相关主题。由于indexeddb的文档是新的,因此您可能需要创建这些相关主题的初始版本。

概观

IndexedDB是一个低级API,用于存储大量结构化数据(包括文件/ blob)的客户端。此API使用索引来启用对此数据的高性能搜索。虽然Web存储对于存储较少量的数据很有用,但对于存储大量结构化数据却没那么有用。创建IndexedDB标准是为了在浏览器中实现Javascript对象的可伸缩,高性能存储和检索。

基本

indexedDB旨在存储Javascript对象文字,例如{prop1 : value, prop2 : value} 。此外,更近期的实现支持存储大型二进制对象(BLOB),例如图像,音频文件和视频文件。此外,indexedDB可以存储包含其他对象(嵌套对象)的对象,例如{prop1 : value, prop2 : {nestedprop1 : value, nestedprop2 : value}}

以下是一些基本概念:

  • 数据库 :对象存储和索引的容器。每个数据库都有一个名称和一个版本。
  • 对象存储对象的容器。这类似于关系数据库中的表。在indexedDB中,记录对应于Javascript对象,列对应于Javascript对象属性。添加到商店的对象按添加的顺序存储。针对商店的查询以相同的顺序检索对象。您可以在对象库中插入,更新或删除对象。
  • 索引 :对象库中包含的特定对象的特殊容器。索引也类似于表,可以理解为具有特殊约束的对象存储。当对象被插入到对象存储中时,如果它满足某些条件,它也可以插入到相应的索引存储中。索引中的对象按索引定义的顺序存储。针对索引的查询按索引定义的顺序检索对象(尽管可以将查询配置为以不同方式工作)。您无法在索引中插入,更新或删除对象(只能通过将对象插入到索引所基于的存储中来间接执行此操作)。
  • 游标 :游标类似于查询。游标迭代对象存储或索引中的对象。游标可以向前或向后移动,搜索(跳转或超前对象),并跳转到底层存储/索引中的下一个或前一个“唯一”对象。
  • 密钥路径 :密钥路径类似于关系数据库中表的主键(或复合主键)。在一般情况下,当您指示indexedDB在特定数据库中创建对象存储时,还要定义存储的密钥路径。您可以使用密钥路径快速获取特定对象,这类似于使用主键在关系表中选择记录。您可以选择使用键来确保稍后尝试将对象插入到已包含具有相同键的对象的对象存储中将产生错误。
  • 事务和请求 :请求类似于单个SQL查询。存在用于插入对象,删除对象,更新对象以及迭代一个或多个对象的特定API方法。每个方法调用对应一个请求。每个请求都发生在事务的上下文中。换句话说,多个请求可以在一个事务中发生。个别请求可能由于各种原因而失败。在单个事务中执行多个请求时,在所有请求都被视为成功之前,请求不会完全提交。以这种方式,如果在稍后的请求中发生问题,则可以“回滚”整个事务,使得底层对象存储的状态与事务中第一个请求发生之前的状态相同。

异步vs同步

indexedDB的Javascript API使用异步技术。当直接与API交互而不是某些更高级别的第三方库时,API需要使用Javascript回调。异步设计有助于防止较大的数据处理操作阻塞主Javascript线程,这有助于防止用户界面(您在浏览器中看到的内容)出现冻结/生涩/滞后。

支持

访问http://caniuse.com/#feat=indexeddb

学到更多

索引数据库请求概述

在此处输入图像描述

如上图所示,在索引数据库中,为了访问您需要的数据:

  1. 打开与所需数据库的连接
  2. 打开一个可以只读或读写的事务
  3. 打开可用于过滤数据的游标或索引
  4. 在游标请求 - onsuccess事件中,您可以访问您的数据

索引DB模式

IndexedDB架构

从上图中可以看出,在单个应用程序中,我们可以创建:

  • 多个数据库
  • 每个数据库可以有多个对象存储(表)
  • 每个对象库都可以存储多个对象

安装或设置

有关设置或安装indexeddb的详细说明。