IndexedDB - 简介



数据库管理系统提供了一种存储和检索数据的机制。有多种类型的数据库可用,其中最常用的有:

  • 层次数据库
  • 网络数据库
  • 面向对象数据库
  • 关系数据库
  • NoSQL 数据库

NoSQL 数据库

NoSQL 数据库(有时称为 Not Only SQL)是一种数据库,它提供了一种存储和检索数据的机制,而不是关系数据库中使用的表格关系。这些数据库是无模式的,支持轻松复制,具有简单的 API,最终一致,并且可以处理海量数据(大数据)。

NoSQL 数据库也有不同的类型,例如:

  • 文档数据库。
  • 键值存储。

    面向列的数据库。

    图数据库。

什么是 IndexedDB

Indexed Database 是一种 NoSQL 数据库或非关系结构化查询语言。它是一个事务性数据库系统,类似于基于 SQL 的 RDBMS。但是,与使用固定列表的基于 SQL 的 RDBMS 不同,IndexedDB 是一个基于 JavaScript 的面向对象数据库。

当我们需要在服务器端存储大量数据并且速度比本地存储快时,就会使用它。由于它将数据存储在浏览器中,因此也可以在线和离线使用。使用它,您可以创建一个(具有丰富的查询功能)可以运行的 Web 应用程序,无论网络连接是否可用。

IndexedDB 的关键特性

以下是 IndexedDB 数据库的关键特性:

IndexedDB 是一个存储键值对的 NoSQL 数据库。它可以通过键或多种键类型存储几乎任何类型的值。

  • 如前所述,IndexedDB 遵循事务性数据库模型 - 事务是围绕操作或操作组的包装类,以便维护数据完整性。您不希望数据被更改或丢失,因此如果事务失败,则会回滚回调。

  • IndexedDB 不使用结构化查询语言 - 由于 IndexedDB 使用 NoSQL 数据库,因此它不使用 SQL,而是使用索引上的查询通过游标或getAll()方法来生成数据,以遍历不同的集合。

  • IndexedDB 使用大量请求 - 请求是接收 DOM 事件成功或失败的对象(DOM - HTML DOM 事件允许 JavaScript 在 HTML 文档中的元素上注册不同的事件处理程序)。DOM 事件是成功或错误,它具有一个目标属性,指示请求的流程。

    成功事件无法取消,但错误事件可以取消。IndexedDB 中有很多请求,例如 onSuccess、onerroraddEventListener()、removeEventListener()。为了了解请求的状态,我们还有 ready state、result 和 error code 属性。

  • IndexedDB 需要遵循相同来源 - 来源是编写脚本的文档的 URL,每个来源在其下都有一些数据库,每个数据库都有自己的名称以供来源识别。对 IndexedDB 实施的安全边界阻止应用程序访问具有不同来源的数据。

    例如,如果我们获取一个 URL 并获取其不同的子目录,它可以检索数据,但如果我们将位置更改为端口 8080 并尝试从常规 URL 和更改的端口检索数据,则我们无法检索数据。

术语

以下是 IndexedDB 中的各种重要术语,在继续之前您应该了解这些术语:

  • 数据库 - 在 IndexedDB 中,数据库是最高级别,它包含包含数据的对象存储。

  • 对象存储 - 对象存储是 IndexedDB 的数据存储实体。可以将其视为 RDBMS 中的表,我们根据要存储的数据类型(例如:id、名称、学号等)存储数据。

  • 事务 - 对于任何数据库操作,我们执行以下过程。

    • 获取数据库对象
    • 在数据库上打开事务
    • 在事务上打开对象存储,然后对对象存储进行操作。

    因此,基本上,事务是一个连接到每个数据库的包装函数,它确保数据完整性,以便如果事务被取消或发生任何错误,它将回调到事务尚未开始的位置。

  • 索引 - 可以将对象存储视为一个表,我们使用索引从表中检索单个属性的数据。例如:姓名、年龄等。

  • 游标 - 在数据库中,如果我们需要遍历对象存储中的多个记录,我们使用游标。

IndexedDB 支持

IndexedDB 是浏览器中的一个数据库,因此我们需要检查当前/现有浏览器是否支持它。为此,请将以下代码粘贴到文本编辑器中,将其保存为test.html并在浏览器中运行它。

const indexedDB =
   window.indexedDB ||
   window.mozIndexedDB ||
   window.webkitIndexedDB ||
   window.msIndexedDB ||
   window.shimIndexedDB;

if (!indexedDB) {
   document.write("IndexedDB could not be found in this browser.");
}
const request = indexedDB.open("MyDatabase", 1);

如果您的浏览器支持 IndexedDB,则此程序将成功执行,并将创建一个数据库。

Mydatabase
广告