偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺析IndexedDB存數(shù)結(jié)構(gòu)

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
IndexedDB 是HTML5中的一種數(shù)據(jù)存儲(chǔ)方式。用來幫助網(wǎng)站,在瀏覽器本地,存儲(chǔ)結(jié)構(gòu)比較復(fù)雜的數(shù)據(jù)。它和HTML5中其它的數(shù)據(jù)存儲(chǔ)方式有一些共性。

IndexedDB 是HTML5中的一種數(shù)據(jù)存儲(chǔ)方式。用來幫助網(wǎng)站,在瀏覽器本地,存儲(chǔ)結(jié)構(gòu)比較復(fù)雜的數(shù)據(jù)。它和HTML5中其它的數(shù)據(jù)存儲(chǔ)方式有一些共性:

1.和我們熟知的cookies類似,IndexedDB是每個(gè)域名獨(dú)立存儲(chǔ)數(shù)據(jù)的。

對(duì)cookies不熟悉的童鞋,可以順便學(xué)習(xí)一下cookies,不過這不影響大家理解IndexedDB。網(wǎng)上cookies的教材和文章非常多,這里不一一列舉。

2.和localStorage相比,IndexedDB可以存儲(chǔ)任意格式的json object,而localStorage則只能存string,我們?cè)谑褂胠ocalStorage存儲(chǔ)復(fù)雜數(shù)據(jù)的時(shí)候,常常會(huì)協(xié)同JSON.parse和JSON.stringify一起工作,而IndexedDB則可以直接存取對(duì)象,無需轉(zhuǎn)換成字符串。

對(duì)localStorage不熟悉的童鞋,可以查閱w3c官方文檔,這里有一份我參與翻譯的中文版文檔,這里還有一些localStorage的使用建議。

3.和web sql database類似,IndexedDB也分?jǐn)?shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)可以建立多個(gè)不同配置的表,而且所有的操作都在事務(wù)(transaction)中完成,不同之處在于web sql database是通過SQL執(zhí)行語句來完成操作的,而IndexedDB則直接通過JS API完成操作。

需要指出的是,web sql database規(guī)范已經(jīng)被w3c拋棄,對(duì)此不熟的朋友,也不必學(xué)習(xí)了,如果有童鞋想嘗試的,可以找一款webkit瀏覽器試試看(傲游3、chrome、safari)

IndexedDB的整體存儲(chǔ)結(jié)構(gòu)

見下圖,IndexedDB(以下簡(jiǎn)稱IDB)嚴(yán)格遵循w3c的同源策略,每個(gè)源都擁有獨(dú)立的大存儲(chǔ)空間;每個(gè)大存儲(chǔ)空間內(nèi),又可以通過當(dāng)前源下的頁(yè)面腳本創(chuàng)建多個(gè)數(shù)據(jù)庫(kù);每個(gè)數(shù)據(jù)庫(kù)可以包含多個(gè)表(ObjectStore);每個(gè)表都是一個(gè)json對(duì)象列表,可以存儲(chǔ)多個(gè)json對(duì)象,比如{"name": "jinjiang", "age": 26}。

 

 

ObjectStore中的key

不同的源、不同的數(shù)據(jù)庫(kù)、不同的表、不同的對(duì)象,都是如何識(shí)別的呢?不同的源直接通過域名進(jìn)行識(shí)別,比如weibo.com、maxthon.cn、renren.com;不同的數(shù)據(jù)庫(kù)通過一個(gè)字符串(name)識(shí)別,比如"blog"、"bbs"、"wiki"等;不同的表也通過一個(gè)字符串(name)識(shí)別,比如"users"、"contacts"、"articles"等;上面這些識(shí)別方式都很好理解,不太好理解的,是如何在表(ObjectStore)中識(shí)別不同的json對(duì)象,即key。

IDB為ObjectStore提供了兩種key:

1.鍵值對(duì)(out-of-line keys: key-value pair)

2.鍵路徑(inline keys: keyPath)

第1種是比較好理解的,就像localStorage中的鍵值對(duì)類似,一個(gè)key對(duì)應(yīng)一個(gè)value,不同的時(shí),localStorage中的key和value都是字符串類型的,而IDB中的key和value都可以是其它json對(duì)象。比如

  1. "a" => "b"  
  2. [3, 7] => 21 

第2種是通過value中的某個(gè)屬性字段直接用作key。因?yàn)関alue都是json數(shù)據(jù),所以我們可以這樣做,假如我們想創(chuàng)建一個(gè)表,里面的數(shù)據(jù)是類似這種感覺的:

  1. {profile: {id: 1, name: "葛優(yōu)"}, girls: [...]}  
  2. {profile: {id: 7, name: "James Bond"}, girls: [...]}  
  3. {profile: {id: 8, name: "周星馳"}, girls: [...]} 

那么我們就可以把profile里的id作為key,方法是為這個(gè)表指定一個(gè)keyPath

  1. keyPath => 'profile.id' 

這樣ObjectStore就會(huì)自動(dòng)按照每個(gè)value的value.profile.id進(jìn)行識(shí)別和匹配。

以上就是2種json對(duì)象的識(shí)別方式。除此之外,我們還可以為ObjectStore加入自增id特性(key generator),這一特性可以讓IDB在添加數(shù)據(jù)時(shí)自動(dòng)分配一個(gè)唯一的key,如果是第2種key,IDB還會(huì)把key存在響應(yīng)的keyPath下。

以上就是對(duì)IndexedDB存數(shù)結(jié)構(gòu)的介紹,先告一段落。

下一篇文章,會(huì)通過簡(jiǎn)單的接口介紹,幫助大家進(jìn)一步認(rèn)識(shí)IndexedDB。

原文:http://bulaoge.net/topic.blg?dmn=g3g4&tid=2329796#Content

【編輯推薦】

調(diào)試IndexedDB應(yīng)用程序

責(zé)任編輯:陳貽新 來源: 勾三股四的博客
相關(guān)推薦

2009-07-09 13:45:06

Servlet基本結(jié)構(gòu)

2023-11-12 21:49:10

Redis數(shù)據(jù)庫(kù)

2009-07-15 13:46:26

Swing體系結(jié)構(gòu)

2016-09-20 15:47:46

JavascriptIndexedDB瀏覽器

2009-08-13 13:29:04

C#結(jié)構(gòu)體使用

2015-08-06 15:20:21

runtimeIOS開發(fā)

2010-06-11 14:15:23

WAP協(xié)議棧

2012-02-15 13:26:56

IndexedDB

2013-01-14 12:53:13

Firefox OSIndexedDB

2010-09-07 10:33:04

CSS

2009-08-31 15:02:22

C#解析結(jié)構(gòu)體指針

2009-08-13 11:18:50

C#結(jié)構(gòu)體

2013-01-18 10:59:44

IBMdW

2012-02-23 13:59:00

IndexedDB

2009-09-23 09:36:34

C#數(shù)組

2018-01-19 08:54:18

存儲(chǔ)系統(tǒng)SILT

2010-04-22 12:18:21

Aix操作系統(tǒng)

2009-12-29 10:24:51

Linux內(nèi)核循環(huán)鏈表

2009-07-03 17:41:47

JavaBean Se

2009-08-13 14:56:46

C#的結(jié)構(gòu)體使用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)