在過去幾年,一種新興的大型數(shù)據(jù)存儲(chǔ)機(jī)制正吞噬大數(shù)據(jù)存儲(chǔ)市場。這種存儲(chǔ)解決方案與傳統(tǒng)的RDBMS有顯著的區(qū)別,它們被稱之為NoSQL。
在NoSQL世界中有以下關(guān)鍵的成員,包括
●Google BigTable、HBase、Hypertable
●Amazon Dynamo、Voldemort、Cassendra、Riak
●Redis
●CouchDB、MongoDB
而這些解決方案又有一些共同的特點(diǎn)
●基于鍵-值存儲(chǔ)
●系統(tǒng)運(yùn)行在海量的普通機(jī)器上
●數(shù)據(jù)在經(jīng)過分區(qū)和復(fù)制后分布在集群中
●放寬對(duì)數(shù)據(jù)一致性的要求(因?yàn)镃AP定理)。
選擇NoSQL的重要標(biāo)準(zhǔn)就是要看CAP(Consistency、Availability和Partition Tolerance),也就是我們所說的一致性、可用性和分區(qū)容忍性。但CAP原則要求在分布式系統(tǒng)只能選擇一致性、可用性和分區(qū)容忍性其中的兩項(xiàng)。
本文旨在提取這些解決方案背后的共同的技術(shù),以便更深入的了解應(yīng)用程序設(shè)計(jì)的意義。本文并不會(huì)對(duì)這些解決方案作比較,也不會(huì)建議使用某一款產(chǎn)品。
API模型
底層的數(shù)據(jù)模型可以被看作為一個(gè)大的Hashtable(鍵/值存儲(chǔ))
API訪問基本形式:
get(key):提取給定鍵的對(duì)應(yīng)值
put(key,value) :新建或更新給定鍵的對(duì)應(yīng)值
delete(key):刪除鍵及其關(guān)聯(lián)值
在服務(wù)器環(huán)境利用更高級(jí)的API執(zhí)行用戶自定義的函數(shù)
execute(key, operation, parameters) :調(diào)用操作給定鍵對(duì)應(yīng)的值,值具有特殊數(shù)據(jù)(例如List、Set、Map等)
mapreduce(keyList, mapFunc, reduceFunc) :對(duì)范圍內(nèi)的鍵調(diào)用MapReduce
機(jī)器布局
底層基礎(chǔ)設(shè)施由大量(成百上千)廉價(jià)的、普通的、不可靠的機(jī)器通過網(wǎng)絡(luò)組成。每臺(tái)機(jī)器為一個(gè)單獨(dú)的物理節(jié)點(diǎn)(PN)。在每個(gè)PN軟件配置相同,但CPU、內(nèi)存、硬盤等會(huì)有所不同。每個(gè)PN根據(jù)不同的硬件配置運(yùn)行不同數(shù)目的虛擬節(jié)點(diǎn)。