NoSQLIndexedDB: 浏览器里搁的数据库简介

一、概述:

有的应用程序都要“数据”支持。对于大多数的Web应用程序来说,数据是以劳务器端进行组织以及整治,然后由客户端(浏览器端)通过网要获取。乘浏览器的拍卖能力持续增高,可以以浏览器端存储和控制应用程序需要之多少,因此越是多的网站开始考虑,将大气多少存储在地头客户端,这样可以减少用户等从劳动器端获取数据的辰。

幸存的浏览器端数据存储方案,都非称储存大量数目。Cookie不超过4KB,且每次要都见面发送回服务器端;Window.name属性缺乏安全性,且没有统一的正式;LocalStorage容量在2.5MB到10MB之间,且其为字符串形式开展仓储。因此,需要平等栽新的技术解决方案,这便是IndexedDB诞生之背景。

IndexedDB
是相同种植浏览器端文档数据库,可以让网页脚本程序创建同操作。它同意储存大量数额,并且提供查询接口,且可以建立目录。
这些特征都是localStorage技术所不富有的。就数据库类型而言,IndexedDB不属于干项目数据库(不支持SQL查询语句),更接近NoSQL数据库。关系项目数据库(如SQL
Server,MySQL,Oracle等于)的数量存储在说明中;文档数据库(如MongoDB,CouchDB,Redis)将数据集作为个体对象来储存。 
经使用IndexedDB,开发者可以透过惯于当服务器端数据库几乎同一的方法进行创办、读取、更新和去大量数记录之操作。

IndexedDB具备以下几码特征: 
(1) 键值对储存(Key-Value) 
IndexedDB内部使用对象仓库(object
store)存放数据。所有品种的数目还得以一直存入,包括JavaScript目标。在目标仓库着,数据以“键值对”的样式保留,每一个数都产生对应的键名,且键名必须是无可比拟之,不克发生再度,否则会丢来左。

(2) 异步API(asynchronous API ) 
IndexedDB数据库在执行增、删、改与查看的操作时莫会见锁死浏览器,用户仍可以开展其它操作。相比之下,localStorage的操作都是并的。异步设计是以防范大气数码的读写时拖慢网页,而影响用户之网站体验。

(3) 支持工作(transaction) 
IndexedDB支持工作(transaction),这意味着一多重操作步骤之中,只要来平等步失败,整个工作就都收回,数据库回到工作有前的状态,不存在才改变写一些数码的景。

(4) 同域限制 
IndexedDB也备受同域限制,每一个数据库对应创建该数据库的域名。来自不同域名的网页,只能看于身域名下的数据库,而不克看其他域名下之数据库。

(5) 存储空间大 
IndexedDB的仓储空间比较localStorage大得差不多,一般的话不少于250MB。IE的储存上限是250MB,Chrome和Opera是硬盘剩余空间的某某百分比,Firefox则从未上限。

(6) 支持二进制储存 
IndexedDB不仅可以储存字符串,还可储存二进制数据。

二、IndexedDB VS LocalStorage, Web SQL, Cookies

IndexedDB VS LocalStorage

IndexedDB和LocalStorage都是用来以浏览器里积存数据,但它利用不同之技能,有两样的用,你用根据自己之状适当的取舍采取啊种。

LocalStorage是用key-value键值模式存储数据,但和IndexedDB不相同的是,它的数并无是遵循目标形式储存。它存储的数额还是字符串形式。如果您想被LocalStorage存储对象,你待借助JSON.stringify()能以对象变成字符串形式,再就此JSON.parse()将字符串还原成对象。但只要只要存储大量的复杂的多少,这并无是同样栽颇好之方案。毕竟,localstorage就是专门为稍数码多少计划之,它的api是手拉手的。

IndexedDB很吻合储存大量多少,它的API是异步调用的。IndexedDB使用索引存储数据,各种数据库操作放在工作中推行。IndexedDB甚至还支持简的数据类型。IndexedDB比localstorage强大得差不多,但它们的API也相对复杂。对于简易的数,你应当继续以localstorage,但当您望存储大量数码常常,IndexedDB会明显的再度可,IndexedDB能提供被您越来越复杂的查询数据的法。

IndexedDB VS Web SQL

WebSQL也是一样栽于浏览器里积存数据的技艺,跟IndexedDB不同的是,IndexedDB更如是一个NoSQL数据库,而WebSQL更像是关系项目数据库,使用SQL查询数据。W3C已经不再支持这种技术。具体情况请圈:http://www.w3.org/TR/webdatabase/。因为不再支持,所以您尽管无须以品种蒙采取这种技能了。

IndexedDB VS Cookies

Cookies(小甜点)听起老好吃,但其实并无是。每次HTTP接受和殡葬都见面传送Cookies数据,它见面占有额外的流量。例如,如果您来一个10KB的Cookies数据,发送10糟糕呼吁,那么,总计就见面出100KB的数以网络及传。Cookies只能是字符串。浏览器里积存Cookies的长空少,很多用户禁止浏览器采用Cookies。所以,Cookies只能用来存储小量的未要的数量。

其三、IndexedDB架构和技术实现

IndexedDB的架构特别像以一部分盛行的劳动器端NoSQL数据库实现着之计划性规范类型。面向对象数据经过object
stores(对象仓库)进行持久化,所有操作基于请求又于事情限制外履;事件生命周期使您能控制数据库底布,错误通过荒谬冒泡来使用API管理。

IndexedDB之打开数据库的乞求生命周期(Life cycle)

浏览器原生提供indexedDB对象,可以经window.indexedDB来一直沾到浏览器提供的欠对象,作为开发者的操作接口。IndexedDB.open方法用于打开浏览器本地数据库。 
IndexedDB使用事件生命周期管理数据库的打开和部署操作。

IndexedDB之因请求(Request)

本着数据库的每次操作,可以描述为经过一个央打开数据库,访问一个object
store,再持续。IndexedDB
API天生是根据请求的,这也是异步API本性所显示。对于当数据库执行之历次操作,都要首先为之操作创建一个央。当该要完成,可以响应由请求结果有的轩然大波要错。

IndexedDB之对象仓库(Object Store)

Object store是IndexedDB数据库的根基。Object
store相当于干项目数据库中的平摆设张记录数据的表明。Object
stores中包括一个要么多单目录(index),在store中按照一对键-值操作,这提供了平等种高效稳定数据的办法。

IndexedDB之举操作基于事务(Transaction)

差于片俗的关系数据库的落实,每一个针对数据库操作是于一个政工之左右文中执行的。事务限制一不成影响一个要多单object
stores,你通过传播一个object store名字的数组到创造工作限制之函数来定义。

始建工作的第二单参数是事情模式。当呼吁一个工作时,必须控制是据特读(ReadOnly)还是读写(ReadWrite)模式要访问。事务是资源密集型的,所以只要您不需要更改data
store中之数,你独自需要坐仅读模式对object stores集合进行呼吁访问。

IndexedDB之不当冒泡

本,有时候,请求或未会见按部就班预想完成。IndexedDB
API通过荒谬冒泡效果来拉跟踪以及管制不当。如果一个一定的请求遇到错误,你可品味在求对象上处理错误,或者您得允许错误通过调用栈冒泡向上传递。这个冒泡天性,使得你免待也每个请求实现特定错误处理操作,而是可以挑选才当一个重复胜似级别及加加错处理,它吃您一个时,保持你的错误处理代码简洁。 
Try……catch机制。

季、w3c中有关IndexedDB基本用法及API

http://www.w3.org/TR/IndexedDB/#dfn-invalidstateerror

五、IndexedDB参考资料

  1. IndexedDB:浏览器里放的数据库, Web骇客 
    http://www.webhek.com/indexeddb/
  2. 前者的数据库:IndexedDB入门(很完美) 
    http://web.jobbole.com/81793/
  3. IndexedDB:浏览器端数据库,
    阮一峰《JavaScript标准参照教程(alpha)》 
    http://javascript.ruanyifeng.com/bom/indexeddb.html
  4. HTML5当地存储——IndexedDB 
    http://www.cnblogs.com/dolphinX/p/3415761.html (一、基本使用) 
    http://www.cnblogs.com/dolphinX/p/3415761.html (二、索引)
  5. HTML5的IndexedDB使用详解 
    http://rainsilence.iteye.com/blog/984569
  6. W3C: Indexed Database API 
    http://www.w3.org/TR/IndexedDB/#dfn-invalidstateerror
  7. Dive into HTML5: 本地存储 
    http://www.devbean.net/2011/06/dive-into-html5-localstorage/
  8. Angular-indexedDB 
    https://github.com/bramski/angular-indexedDB
  9. HTML5 Local Storage本地存储 
    http://www.cnblogs.com/xiaowei0705/archive/2011/04/19/2021372.html
网站地图xml地图