在 浏览器数据库 IndexedDB 简明教程 ( 一 ) - 初识 章节中,我们简单的介绍了下 IndexedDB
的诞生背景和一些特性,本章节我们继续,介绍一些 IndexedDB 的基本概念和术语
IndexedDB 基本概念
从特性上看,IndexDB 的确非常简单,但是,从 API 上来看,却是复杂的无比了,也因此衍生除了许多概念。
IndexDB 许多不同的实体抽象封装为单个对象接口,学习 API 是学习它的各种对象接口
其实,对于 99% 的语言,也都是如此,真正的语法,不就是那几个关键字么? 除了变态的 C++ 语言
本章接下来的内容,就来聊聊 IndexedDB 中的那些接口对象,对了,如果你看不懂,那就对照者 MySQL 或任何你熟悉的数据库系统来学习吧,这样简单些
- 数据库:
IDBDatabase
对象,类似于关系型数据库系统里的 「 数据库 」 - 存储对象:
IDBObjectStore
对象,类似于关系数据库中的 「 表 」 - 索引:
IDBIndex
对象,类似于关系数据库系统中的 「 索引 」 - 事务:
IDBTransaction
对象,类似于关系数据库系统中的 「 事务 」 - 操作请求:
IDBRequest
对象,类似于关系数据库系统中的 「 SQL 语句 」 - 游标:
IDBCursor
对象,类似于关系数据库客户端中的 「 游标 」 (cursor
) - 主键集合:
IDBKeyRange
对象
1. 数据库
数据库是有相互关系的数据的集合,每个域名 ( 严格来说,协议 + 域名 + 端口 ) 可以创建任意数量的数据库
不同于其它关系型数据库, IndexedDB
的数据库具有版本的概念。同一时间同一个数据库,只能存在一个版本
如果要修改数据库结构,例如添加或删除表索引或主键,那么只能通过升级数据库版本来执行此操作,也就是说这些操作必须指定一个新的数据库版本
如果你对 Android ,那么应该也熟悉 Android 中的 SQLite ,它的数据库也存在版本的概念
2. 存储对象
每个数据库都可以包含多个存储对象,存储对象类似于关系型数据库系统中的 「 表 」 的概念
3. 数据记录
存储对象里保存这数据记录。每条数据记录相当于关系型数据库系统中的 「 行 」,但因为是 键值对
存储,所以每条数据记录只有 「 主键 」 和 实际存储的数据
-
主键用于建立默认索引,主键是唯一的,否则将引发错误,主键可以是实际存储数据中的一个属性,也可以是一个可以增长的整数,类型无所谓,只要能够唯一标识即可
例如,对于下面这个要存储的数据,可以使用它的
id
属性作为主键{ id: 1, text: 'foo' }
-
实际存储的数据可以是任意类型,可以是任意大小,无所谓,一切都看你自己怎么处理
4. 索引
为了加快数据检索,我们可以为存储对象中的不同属性构建索引,是的,不限于主键,任意属性都可以创建索引
5. 事务
IndexedDB 另一个非常有趣的一点,就是把事务上升到非常高的级别,而且推荐我们在需要读取,写入或删除数据记录时,应通过事务来完成
IndexedDB 中的事务对象 IDBTransaction
提供了三个可监听的事件 error
, abort
和 complete
,分别用于事务发生错误、事务被取消、事务执行成功后回调通知用
结束语
怎么样 ? 看起来是复杂呢还是简单呢 ?
其实,相比于 MySQL 等数据库,这个概念和术语还是少了些
IndexedDB 整个文字级别的基础知识就这么多了,下一章节开始,我们将开始试用生涯...