自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺析Oracle NoSQL Database

數(shù)據(jù)庫 Oracle
本文中,作者對(duì)甲骨文最新發(fā)布的Oracle NoSQL Database從數(shù)據(jù)模型、分區(qū)與架構(gòu)、操作、數(shù)據(jù)一致性等方面進(jìn)行了分析。

近日Oracle提供了不久前公布的NoSQL數(shù)據(jù)庫的下載,目前只有企業(yè)版,開源的社區(qū)版還沒提供,也就是說還看不到源碼。不過根據(jù)文檔也能大致了解這個(gè)NoSQL數(shù)據(jù)庫怎么樣??焖倏戳丝?,總結(jié)如下。

一、數(shù)據(jù)模型

key包含一到多個(gè)major key component和零到多個(gè)minor key component,組合起來唯一標(biāo)準(zhǔn)一條記錄。key component為Java String,按對(duì)應(yīng)encoding排序。value則是字節(jié)流。key和value的大小都沒有嚴(yán)格限制。

記錄還有版本號(hào),每次更新都產(chǎn)生唯一的新版本號(hào)。在put/delete/get操作時(shí),都可以指定要版本號(hào),其中g(shù)et時(shí)用于指定要讀的版本,而 put/delete指定版本號(hào)是指當(dāng)記錄的最新版本還是指定版本時(shí)才更新,用于實(shí)現(xiàn)原子Compare-and-Swap語義。版本號(hào)應(yīng)該至少是在一個(gè) partition內(nèi)部是全局唯一的。

二、分區(qū)與架構(gòu)

兩層架構(gòu),客戶端直接到存儲(chǔ)節(jié)點(diǎn)。核心架構(gòu)是Replication Node和Replication Group,一個(gè)Replication Group包含一個(gè)可寫的Master Replication Node和多個(gè)只讀的replica。master失敗時(shí)會(huì)failover到某replica?,F(xiàn)在發(fā)布的版本暫時(shí)還不能動(dòng)態(tài)調(diào)整存儲(chǔ)節(jié)點(diǎn)個(gè)數(shù),以后會(huì)加。

數(shù)據(jù)按major key hash分區(qū)到partition。這樣擁有相同的major key僅僅minor key不同的多條記錄一定在同一partition,可以提供高效的多記錄操作,且系統(tǒng)還支持原子性的操作這樣的多條記錄。一個(gè)Replication Group一般負(fù)責(zé)多個(gè)partition,一個(gè)存儲(chǔ)節(jié)點(diǎn)一般負(fù)責(zé)一個(gè)Replication Node,如果調(diào)整存儲(chǔ)節(jié)點(diǎn)個(gè)數(shù),則以partition為單位來移動(dòng)數(shù)據(jù)。為方便以后scale-out,應(yīng)該一開始就多一些partition。

系統(tǒng)底層用的是Berkeley DB Java Edition,用Btree數(shù)據(jù)結(jié)構(gòu)。緩存包含Berkeley DB的緩存和文件系統(tǒng)緩存,不用DIRECT_IO,文檔建議Berkeley DB緩存用于容納Btree的內(nèi)部節(jié)點(diǎn),葉節(jié)點(diǎn)用文件系統(tǒng)緩存。另外也提供單機(jī)版稱為KVLite。

三、操作

Oracle NoSQL提供的操作比較豐富,主要包括:

1、用于插入或更新記錄的put類操作,包括put/putIfAbsent/putIfPresent/putIfVersion,都要指定一個(gè)完整的Key。用途顧名思義就不說了,稍提一點(diǎn)是putIfVersion功能提供了Compare-and-Swap,在處理并發(fā)時(shí)很有用

2、用于刪除記錄的delete類操作,包括delete/deleteIfVersion/multiDelete。前兩者要指定完整Key,用途顧名思義。說一下multiDelete,這個(gè)操作最多可以指定三個(gè)參數(shù),一是必須指定完整的major key,二是可以指定一個(gè)由第一個(gè)minor key的上下限構(gòu)成的KeyRange,三是可以指定是刪除子節(jié)點(diǎn)/子孫節(jié)點(diǎn)/父節(jié)點(diǎn)和子節(jié)點(diǎn)/父節(jié)點(diǎn)和子孫節(jié)點(diǎn)等多種Depth模式。

3、用于讀取記錄的get類操作,包括get/multiGet/multiGetIterator/storeIterator。multiGet和 multiDelete一樣可以指定KeyRange和Depth。multiGetIterator用于批量取一個(gè)完整major key下的大量記錄,防止占內(nèi)存過多,可以指定遍歷方向,不保證數(shù)據(jù)是某時(shí)刻的一致視圖。storeIterator用于遍歷不完整major key下的大量記錄,甚至遍歷所有記錄。

4、用于批量原子更新多條記錄的execute操作。系統(tǒng)保證這批操作的原子性,限制是操作的記錄必須都擁有相同的major key,且同一條記錄不能操作多次。

四、數(shù)據(jù)一致性

Oracle NoSQL的數(shù)據(jù)一致性比較靈活精細(xì)。就讀取而言,可以指定只從master讀、不管replica是否落后都可以從replica讀、只在 replica落后master時(shí)間在某閾值之內(nèi)時(shí)才能從replica讀、只在replica的版本號(hào)不小于某指定版本號(hào)時(shí)才讀。指定版本號(hào)的讀一致性可以用于實(shí)現(xiàn)read-your-own-write形式的一致性,即保證自己能讀到自己剛寫的數(shù)據(jù)。

就更新而言,可以指定兩方面的策略。一是master要不要等各個(gè)replica的應(yīng)答,這里可以選要所有replica應(yīng)答、要大多數(shù)replica應(yīng)答和不等replica應(yīng)答等3 種。二是數(shù)據(jù)要不要持久化到磁盤,這里可以選不要(更新到內(nèi)存就可以了)、寫磁盤但不SYNC、寫磁盤且要SYNC等3種。持久化策略可以指定 master和replica分別指定。根據(jù)文檔看似乎沒有用到2PC。

五、系統(tǒng)管理及其它

系統(tǒng)提供命令行或WEB界面的管理工具,管理比較方便??梢詣?chuàng)建snapshot,snapshot只在partition內(nèi)部一致,不保證全局一致??梢詮膕napshot恢復(fù)。提供將NoSQL Database數(shù)據(jù)導(dǎo)入到Hadoop功能??蛻舳蓑?qū)動(dòng)是jar包。

六、小結(jié)與評(píng)價(jià)

優(yōu)點(diǎn):

1、數(shù)據(jù)模型和操作強(qiáng)大。通過由多個(gè)key component來構(gòu)成key并且設(shè)計(jì)操作時(shí)加以支持,Oracle NoSQL實(shí)際上不再是純平面的Key-Value模型,而經(jīng)常呈現(xiàn)為一種樹形模型。多一個(gè)key component后綴的記錄可以看作是子節(jié)點(diǎn)。系統(tǒng)提供了許多批量操作一個(gè)子樹的功能,對(duì)比關(guān)系模式可以看出這解決了一部分JOIN問題,提高了開發(fā)效率。

2、數(shù)據(jù)一致性靈活精細(xì)。讀取和更新都提供了很多一致性選項(xiàng),可以實(shí)現(xiàn)不同的性能和一致性折衷。此外通過版本號(hào),可以支持Compare-and-Swap、Read-your-own-write等語義,為實(shí)現(xiàn)并發(fā)正確性提供了便利。

3、支持多記錄原子性操作。

當(dāng)前版本最主要的問題是不能加存儲(chǔ)節(jié)點(diǎn),不過相信這個(gè)問題不久后會(huì)被解決。

原文出處:http://wangyuanzju.blog.163.com/blog/static/130292011919114541710/

【編輯推薦】

  1. Oracle發(fā)布NoSQL數(shù)據(jù)庫
  2. 微軟進(jìn)軍NoSQL 發(fā)布Trinity數(shù)據(jù)庫
  3. 微軟研究人員:NoSQL需要標(biāo)準(zhǔn)化
  4. MySQL中的NoSQL插件
  5. SQL與NoSQL——MySQL與NoSQL的融合
責(zé)任編輯:艾婧 來源: wangyuanzju的博客
相關(guān)推薦

2011-11-21 11:19:19

Oracle NoSQ

2009-07-15 10:43:37

MyEclipse D

2010-04-13 17:10:59

Oracle Data

2010-10-21 08:45:19

NoSQL

2013-05-03 00:41:57

大數(shù)據(jù)NoSQL

2010-04-14 14:14:42

Oracle用戶解鎖

2011-10-09 09:38:03

OracleNoSQL

2009-06-09 13:21:32

Oracle Data實(shí)現(xiàn)

2013-03-26 10:33:50

SaaSNoSQLOracle

2014-04-09 09:55:46

Oracle NoSQ

2009-07-17 16:49:18

iBATIS XML配

2010-04-16 14:39:54

ORACLE鎖

2014-06-12 08:48:38

Oracle數(shù)據(jù)庫

2011-08-09 14:54:01

OracleDATABASE LI

2010-04-16 12:57:20

Spatial數(shù)據(jù)加密

2011-10-13 16:01:22

F5Oracle DataOracle WebL

2010-04-16 16:12:51

jdbc分頁

2009-07-22 08:54:32

Oracle恢復(fù)管理器
點(diǎn)贊
收藏

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