Oracle NOSQL DATABASE簡介

redhouser發表於2011-12-26

Oracle2011年10月27日宣佈,Oracle NoSQL資料庫即日起可以在Oracle技術網下載。為了方便閱讀,摘錄如下。

甲骨文公司將提供一款新型整合設計系統,即Oracle大資料機(Oracle Big Data Appliance),該系統可以對Oracle NoSQL資料庫以及其它Oracle大資料產品進行最佳化。據悉,Oracle大資料機將於2012年第一季度面市。

Oracle NoSQL資料庫是Oracle大資料產品線的關鍵組成產品之一,能夠幫助企業以動態架構輕鬆管理大量資料,例如部落格資料、感測器和智慧電錶資料、個性化資料收集以及社交網路存留的資料。其中,高度可用和可擴充套件的Oracle NoSQL資料庫採用簡單的關鍵價值資料模型,從而能夠更加簡單、格式靈活的進行高效率資料儲存,是快速開發和部署應用的理想工具。

2006年,甲骨文收購了開源伯克利資料庫(BerkeleyDB)的開發商Sleepycat,為C語言和後來的Java程式設計師提供了靈活的鍵值儲存。而Berkeley DB的技術據說就是甲骨文NoSQL資料庫的核心,雖然看上去像是被完全重寫了一遍。

特性:
一、資料模型
key包含一到多個major key component和零到多個minor key component,組合起來唯一標準一條記錄。key component為Java String,按對應encoding排序。value則是位元組流。key和value的大小都沒有嚴格限制。

記錄還有版本號,每次更新都產生唯一的新版本號。在put/delete/get操作時,都可以指定要版本號,其中get時用於指定要讀的版本,而 put/delete指定版本號是指當記錄的最新版本還是指定版本時才更新,用於實現原子Compare-and-Swap語義。版本號應該至少是在一個 partition內部是全域性唯一的。

二、分割槽與架構
兩層架構,客戶端直接到儲存節點。核心架構是Replication Node和Replication Group,一個Replication Group包含一個可寫的Master Replication Node和多個只讀的replica。master失敗時會failover到某replica。現在釋出的版本暫時還不能動態調整儲存節點個數,以後會加。

資料按major key hash分割槽到partition。這樣擁有相同的major key僅僅minor key不同的多條記錄一定在同一partition,可以提供高效的多記錄操作,且系統還支援原子性的操作這樣的多條記錄。一個Replication Group一般負責多個partition,一個儲存節點一般負責一個Replication Node,如果調整儲存節點個數,則以partition為單位來移動資料。為方便以後scale-out,應該一開始就多一些partition。

系統底層用的是Berkeley DB Java Edition,用Btree資料結構。快取包含Berkeley DB的快取和檔案系統快取,不用DIRECT_IO,文件建議Berkeley DB快取用於容納Btree的內部節點,葉節點用檔案系統快取。另外也提供單機版稱為KVLite。

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

1、用於插入或更新記錄的put類操作,包括put/putIfAbsent/putIfPresent/putIfVersion,都要指定一個完整的Key。用途顧名思義就不說了,稍提一點是putIfVersion功能提供了Compare-and-Swap,在處理併發時很有用

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

3、用於讀取記錄的get類操作,包括get/multiGet/multiGetIterator/storeIterator。multiGet和 multiDelete一樣可以指定KeyRange和Depth。multiGetIterator用於批次取一個完整major key下的大量記錄,防止佔記憶體過多,可以指定遍歷方向,不保證資料是某時刻的一致檢視。storeIterator用於遍歷不完整major key下的大量記錄,甚至遍歷所有記錄。

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

四、資料一致性
目前,很多 NoSQL產品僅可以提供“最終一致性”,即對多個資料副本進行“最終”更新,因此很難進行應用編寫。這便將生成程式碼以處理一致性的責任留給了應用開發人員。相反,Oracle NoSQL資料庫具有管理一致性,併為開發人員提供可配置的一致性選項,滿足了不同應用的需求,併為企業提供了強大的技術支援。因此相對於諸多同型別解決方案,Oracle NoSQL資料庫更易於安裝、配置和管理。

甲骨文NoSQL資料庫中重要的地方是針對ACID遵從而做的近似工程,這讓甲骨文NoSQL達到了SQL資料庫所能夠提供的嚴格標準。ACID的意味著事務所具備的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、永續性(Durability)。

不過,目前對於如何解釋其具體含義還存在著很大的爭議。而大多數的NoSQL系統走的是另一條路:BASE,即基本可用(Basically Available)、軟狀態(Soft State)和最終一致性(Eventually Consistent)。換句話說,你可能會得到正確的答案,除非你不做。關於甲骨文NoSQL資料庫是否真正提供ACID遵從還有不少爭論,但甲骨文NoSQL資料庫確實可以做出這樣的承諾。

Oracle NoSQL的資料一致性比較靈活精細。就讀取而言,可以指定只從master讀、不管replica是否落後都可以從replica讀、只在 replica落後master時間在某閾值之內時才能從replica讀、只在replica的版本號不小於某指定版本號時才讀。指定版本號的讀一致性可以用於實現read-your-own-write形式的一致性,即保證自己能讀到自己剛寫的資料。

就更新而言,可以指定兩方面的策略。一是master要不要等各個replica的應答,這裡可以選要所有replica應答、要大多數replica應答和不等replica應答等3 種。二是資料要不要持久化到磁碟,這裡可以選不要(更新到記憶體就可以了)、寫磁碟但不SYNC、寫磁碟且要SYNC等3種。持久化策略可以指定 master和replica分別指定。根據文件看似乎沒有用到2PC。

五、系統管理及其它
系統提供命令列或WEB介面的管理工具,管理比較方便。可以建立snapshot,snapshot只在partition內部一致,不保證全域性一致。可以從snapshot恢復。提供將NoSQL Database資料匯入到Hadoop功能。客戶端驅動是jar包。

六、小結與評價
優點:
1、資料模型和操作強大。透過由多個key component來構成key並且設計操作時加以支援,Oracle NoSQL實際上不再是純平面的Key-Value模型,而經常呈現為一種樹形模型。多一個key component字尾的記錄可以看作是子節點。系統提供了許多批次操作一個子樹的功能,對比關係模式可以看出這解決了一部分JOIN問題,提高了開發效率。

2、資料一致性靈活精細。讀取和更新都提供了很多一致性選項,可以實現不同的效能和一致性折衷。此外透過版本號,可以支援Compare-and-Swap、Read-your-own-write等語義,為實現併發正確性提供了便利。

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

當前版本最主要的問題是不能加儲存節點,不過相信這個問題不久後會被解決。

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-713935/,如需轉載,請註明出處,否則將追究法律責任。

相關文章