作者:大數(shù)據(jù)女神-諾藍(lán)(微信公號:dashujunvshen)。本文是36大數(shù)據(jù)專稿,轉(zhuǎn)載必須標(biāo)明來源36大數(shù)據(jù)。
本文一共分為上下兩部分。我們將針對大數(shù)據(jù)開源工具不同的用處來進(jìn)行分類,并且附上了官網(wǎng)和部分下載鏈接,希望能給做大數(shù)據(jù)的朋友做個(gè)參考。
另外第二部分將整合大數(shù)據(jù)日志收集系統(tǒng)、消息系統(tǒng)、集群管理、基礎(chǔ)設(shè)施、監(jiān)控管理等開源工具。并將于3月12日發(fā)布,盡請期待。
下面是第一部分。
一、Phoenix
貢獻(xiàn)者::Salesforce
簡介:這是一個(gè)Java中間層,可以讓開發(fā)者在Apache HBase上執(zhí)行SQL查詢。Phoenix完全使用Java編寫,代碼位于GitHub上,并且提供了一個(gè)客戶端可嵌入的JDBC驅(qū)動(dòng)。
Phoenix查詢引擎會將SQL查詢轉(zhuǎn)換為一個(gè)或多個(gè)HBase scan,并編排執(zhí)行以生成標(biāo)準(zhǔn)的JDBC結(jié)果集。直接使用HBase API、協(xié)同處理器與自定義過濾器,對于簡單查詢來說,其性能量級是毫秒,對于百萬級別的行數(shù)來說,其性能量級是秒。
Phoenix最值得關(guān)注的一些特性有:
嵌入式的JDBC驅(qū)動(dòng),實(shí)現(xiàn)了大部分的java.sql接口,包括元數(shù)據(jù)API
可以通過多部行鍵或是鍵/值單元對列進(jìn)行建模
完善的查詢支持,可以使用多個(gè)謂詞以及優(yōu)化的掃描鍵
DDL支持:通過CREATE TABLE、DROP TABLE及ALTER TABLE來添加/刪除列
版本化的模式倉庫:當(dāng)寫入數(shù)據(jù)時(shí),快照查詢會使用恰當(dāng)?shù)哪J?/p>
DML支持:用于逐行插入的UPSERT VALUES、用于相同或不同表之間大量數(shù)據(jù)傳輸?shù)腢PSERT
SELECT、用于刪除行的DELETE
通過客戶端的批處理實(shí)現(xiàn)的有限的事務(wù)支持
單表——還沒有連接,同時(shí)二級索引也在開發(fā)當(dāng)中
緊跟ANSI SQL標(biāo)準(zhǔn)
二、Stinger
貢獻(xiàn)者::Hortonworks
簡介:原叫Tez,下一代Hive,Hortonworks主導(dǎo)開發(fā),運(yùn)行在YARN上的DAG計(jì)算框架。
某些測試下,Stinger能提升10倍左右的性能,同時(shí)會讓Hive支持更多的SQL,其主要優(yōu)點(diǎn)包括:
讓用戶在Hadoop獲得更多的查詢匹配。其中包括類似OVER的字句分析功能,支持WHERE查詢,讓Hive的樣式系統(tǒng)更符合SQL模型。
優(yōu)化了Hive請求執(zhí)行計(jì)劃,優(yōu)化后請求時(shí)間減少90%。改動(dòng)了Hive執(zhí)行引擎,增加單Hive任務(wù)的被秒處理記錄數(shù)。
在Hive社區(qū)中引入了新的列式文件格式(如ORC文件),提供一種更現(xiàn)代、高效和高性能的方式來儲存Hive數(shù)據(jù)。
引入了新的運(yùn)行時(shí)框架——Tez,旨在消除Hive的延時(shí)和吞吐量限制。Tez通過消除不必要的task、障礙同步和對HDFS的讀寫作業(yè)來優(yōu)化Hive job。這將優(yōu)化Hadoop內(nèi)部的執(zhí)行鏈,徹底加速Hive負(fù)載處理。
三、Presto
貢獻(xiàn)者::Facebook
簡介:Facebook開源的數(shù)據(jù)查詢引擎Presto ,可對250PB以上的數(shù)據(jù)進(jìn)行快速地交互式分析。該項(xiàng)目始于 2012 年秋季開始開發(fā),目前該項(xiàng)目已經(jīng)在超過 1000 名 Facebook 雇員中使用,運(yùn)行超過 30000 個(gè)查詢,每日數(shù)據(jù)在 1PB 級別。Facebook 稱 Presto 的性能比諸如 Hive 和 Map*Reduce 要好上 10 倍有多。
Presto 當(dāng)前支持 ANSI SQL 的大多數(shù)特效,包括聯(lián)合查詢、左右聯(lián)接、子查詢以及一些聚合和計(jì)算函數(shù);支持近似截然不同的計(jì)數(shù)(DISTINCT COUNT)等。
四、Shark
簡介:Shark即Hive on Spark,本質(zhì)上是通過Hive的HQL解析,把HQL翻譯成Spark上的RDD操作,然后通過Hive的metadata獲取數(shù)據(jù)庫里的表信息,實(shí)際HDFS上的數(shù)據(jù)和文件,會由Shark獲取并放到Spark上運(yùn)算。Shark的特點(diǎn)就是快,完全兼容Hive,且可以在shell模式下使用rdd2sql()這樣的API,把HQL得到的結(jié)果集,繼續(xù)在scala環(huán)境下運(yùn)算,支持自己編寫簡單的機(jī)器學(xué)習(xí)或簡單分析處理函數(shù),對HQL結(jié)果進(jìn)一步分析計(jì)算。
Shark速度快的原因除了Spark平臺提供的基于內(nèi)存迭代計(jì)算外,在設(shè)計(jì)上還存在對Spark上進(jìn)行了一定的改造,主要有partial DAG execution:對join優(yōu)化,調(diào)節(jié)并行粒度,因?yàn)镾park本身的寬依賴和窄依賴會影響并行計(jì)算和速度
基于列的壓縮和存儲:把HQL表數(shù)據(jù)按列存,每列是一個(gè)array,存在JVM上,避免了JVM GC低效,而壓縮和解壓相關(guān)的技術(shù)是Yahoo!提供的。
結(jié)來說,Shark是一個(gè)插件式的東西,在我現(xiàn)有的Spark和Hive及hadoop-client之間,在這兩套都可用的情況下,Shark只要獲取Hive的配置(還有metastore和exec等關(guān)鍵包),Spark的路徑,Shark就能利用Hive和Spark,把HQL解析成RDD的轉(zhuǎn)換,把數(shù)據(jù)取到Spark上運(yùn)算和分析。在SQL on Hadoop這塊,Shark有別于Impala,Stringer,而這些系統(tǒng)各有自己的設(shè)計(jì)思路,相對于對MR進(jìn)行優(yōu)化和改進(jìn)的思路,Shark的思路更加簡單明了些。
五、Pig
簡介:Pig是一種編程語言,它簡化了Hadoop常見的工作任務(wù)。Pig可加載數(shù)據(jù)、表達(dá)轉(zhuǎn)換數(shù)據(jù)以及存儲最終結(jié)果。Pig內(nèi)置的操作使得半結(jié)構(gòu)化數(shù)據(jù)變得有意義(如日志文件)。同時(shí)Pig可擴(kuò)展使用Java中添加的自定義數(shù)據(jù)類型并支持?jǐn)?shù)據(jù)轉(zhuǎn)換。
Pig最大的作用就是對mapreduce算法(框架)實(shí)現(xiàn)了一套shell腳本 ,類似我們通常熟悉的SQL語句,在Pig中稱之為Pig Latin,在這套腳本中我們可以對加載出來的數(shù)據(jù)進(jìn)行排序、過濾、求和、分組(group by)、關(guān)聯(lián)(Joining),Pig也可以由用戶自定義一些函數(shù)對數(shù)據(jù)集進(jìn)行操作,也就是傳說中的UDF(user-defined functions)。
六、Cloudera Impala
貢獻(xiàn)者::Cloudera
簡介:Cloudera Impala 可以直接為存儲在HDFS或HBase中的Hadoop數(shù)據(jù)提供快速,交互式的SQL查詢。除了使用相同的存儲平臺外, Impala和Apache Hive一樣也使用了相同的元數(shù)據(jù),SQL語法(Hive SQL),ODBC驅(qū)動(dòng)和用戶接口(Hue Beeswax),這就很方便的為用戶提供了一個(gè)相似并且統(tǒng)一的平臺來進(jìn)行批量或?qū)崟r(shí)查詢。
Cloudera Impala 是用來進(jìn)行大數(shù)據(jù)查詢的補(bǔ)充工具。 Impala 并沒有取代像Hive這樣基于MapReduce的分布式處理框架。Hive和其它基于MapReduce的計(jì)算框架非常適合長時(shí)間運(yùn)行的批處理作業(yè),例如那些涉及到批量 Extract、Transform、Load ,即需要進(jìn)行ETL作業(yè)。
Impala 提供了:
數(shù)據(jù)科學(xué)家或數(shù)據(jù)分析師已經(jīng)熟知的SQL接口
能夠在Apache Hadoop 的大數(shù)據(jù)中進(jìn)行交互式數(shù)據(jù)查詢
Single system for big data processing and analytics so customers can avoid costly modeling and ETL just for analytics
七、Apache Drill
貢獻(xiàn)者::MapR
簡介:Apache Drill是是一個(gè)能夠?qū)Υ髷?shù)據(jù)進(jìn)行交互分析、開源的分布式系統(tǒng),且基于Google Dremel實(shí)現(xiàn),它能夠運(yùn)行在上千個(gè)節(jié)點(diǎn)的服務(wù)器集群上,且能在幾秒內(nèi)處理PB級或者萬億條的數(shù)據(jù)記錄。Drill能夠幫助企業(yè)用戶快速、高效地進(jìn)行Hadoop數(shù)據(jù)查詢和企業(yè)級大數(shù)據(jù)分析。Drill于2012年8月份由Apache推出。
從Drill官方對其架構(gòu)的介紹中得知,其具有適于實(shí)時(shí)的分析和快速的應(yīng)用開發(fā)、適于半結(jié)構(gòu)化/嵌套數(shù)據(jù)的分析、兼容現(xiàn)有的SQL環(huán)境和Apache Hive等特征。另外,Drill的核心模塊是Drillbit服務(wù),該服務(wù)模塊包括遠(yuǎn)程訪問子模塊、SQL解析器、查詢優(yōu)化器、任務(wù)計(jì)劃執(zhí)行引擎、存儲插件接口(DFS、HBase、Hive等的接口)、分布式緩存模塊等幾部分,如下圖所示:
八、Apache Tajo
簡介:Apache Tajo項(xiàng)目的目的是在HDFS之上構(gòu)建一個(gè)先進(jìn)的數(shù)據(jù)倉庫系統(tǒng)。Tajo將自己標(biāo)榜為一個(gè)“大數(shù)據(jù)倉庫”,但是它好像和之前介紹的那些低延遲查詢引擎類似。雖然它支持外部表和Hive數(shù)據(jù)集(通過HCatalog),但是它的重點(diǎn)是數(shù)據(jù)管理,提供低延遲的數(shù)據(jù)訪問,以及為更傳統(tǒng)的ETL提供工具。它也需要在數(shù)據(jù)節(jié)點(diǎn)上部署Tajo特定的工作進(jìn)程。
Tajo的功能包括:
ANSI SQL兼容
JDBC 驅(qū)動(dòng)
集成Hive metastore能夠訪問Hive數(shù)據(jù)集
一個(gè)命令行客戶端
一個(gè)自定義函數(shù)API
九、Hive
簡介:hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。 其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過類SQL語句快速實(shí)現(xiàn)簡單的MapReduce統(tǒng)計(jì),不必開發(fā)專門的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉庫的統(tǒng)計(jì)分析。
一、Facebook Puma
貢獻(xiàn)者:Facebook
簡介:實(shí)時(shí)數(shù)據(jù)流分析
二、Twitter Rainbird
貢獻(xiàn)者:Twitter
簡介:Rainbird一款基于Zookeeper, Cassandra, Scribe, Thrift的分布式實(shí)時(shí)統(tǒng)計(jì)系統(tǒng),這些基礎(chǔ)組件的基本功能如下:
Zookeeper,Hadoop子項(xiàng)目中的一款分布式協(xié)調(diào)系統(tǒng),用于控制分布式系統(tǒng)中各個(gè)組件中的一致性。
Cassandra,NoSQL中一款非常出色的產(chǎn)品,集合了Dynamo和Bigtable特性的分布式存儲系統(tǒng),用于存儲需要進(jìn)行統(tǒng)計(jì)的數(shù)據(jù),統(tǒng)計(jì)數(shù)據(jù),并且提供客戶端進(jìn)行統(tǒng)計(jì)數(shù)據(jù)的查詢。(需要使用分布式Counter補(bǔ)丁CASSANDRA-1072)
Scribe,F(xiàn)acebook開源的一款分布式日志收集系統(tǒng),用于在系統(tǒng)中將各個(gè)需要統(tǒng)計(jì)的數(shù)據(jù)源收集到Cassandra中。
Thrift,F(xiàn)acebook開源的一款跨語言C/S網(wǎng)絡(luò)通信框架,開發(fā)人員基于這個(gè)框架可以輕易地開發(fā)C/S應(yīng)用。
用處
Rainbird可以用于實(shí)時(shí)數(shù)據(jù)的統(tǒng)計(jì):
統(tǒng)計(jì)網(wǎng)站中每一個(gè)頁面,域名的點(diǎn)擊次數(shù)
內(nèi)部系統(tǒng)的運(yùn)行監(jiān)控(統(tǒng)計(jì)被監(jiān)控服務(wù)器的運(yùn)行狀態(tài))
記錄最大值和最小值
三、Yahoo S4
貢獻(xiàn)者:Yahoo
簡介:S4(Simple Scalable Streaming System)最初是Yahoo!為提高搜索廣告有效點(diǎn)擊率的問題而開發(fā)的一個(gè)平臺,通過統(tǒng)計(jì)分析用戶對廣告的點(diǎn)擊率,排除相關(guān)度低的廣告,提升點(diǎn)擊率。目前該項(xiàng)目剛啟動(dòng)不久,所以也可以理解為是他們提出的一個(gè)分布式流計(jì)算(Distributed Stream Computing)的模型。
S4的設(shè)計(jì)目標(biāo)是:
·提供一種簡單的編程接口來處理數(shù)據(jù)流
·設(shè)計(jì)一個(gè)可以在普通硬件之上可擴(kuò)展的高可用集群。
·通過在每個(gè)處理節(jié)點(diǎn)使用本地內(nèi)存,避免磁盤I/O瓶頸達(dá)到最小化延遲
·使用一個(gè)去中心的,對等架構(gòu);所有節(jié)點(diǎn)提供相同的功能和職責(zé)。沒有擔(dān)負(fù)特殊責(zé)任的中心節(jié)點(diǎn)。這大大簡化了部署和維護(hù)。
·使用可插拔的架構(gòu),使設(shè)計(jì)盡可能的即通用又可定制化。
·友好的設(shè)計(jì)理念,易于編程,具有靈活的彈性
四、Twitter Storm
貢獻(xiàn)者:Twitter
簡介:Storm是Twitter開源的一個(gè)類似于Hadoop的實(shí)時(shí)數(shù)據(jù)處理框架,它原來是由BackType開發(fā),后BackType被Twitter收購,將Storm作為Twitter的實(shí)時(shí)數(shù)據(jù)分析系統(tǒng)。
實(shí)時(shí)數(shù)據(jù)處理的應(yīng)用場景很廣泛,例如商品推薦,廣告投放,它能根據(jù)當(dāng)前情景上下文(用戶偏好,地理位置,已發(fā)生的查詢和點(diǎn)擊等)來估計(jì)用戶點(diǎn)擊的可能性并實(shí)時(shí)做出調(diào)整。
storm的三大作用領(lǐng)域:
1.信息流處理(Stream Processing)
Storm可以用來實(shí)時(shí)處理新數(shù)據(jù)和更新數(shù)據(jù)庫,兼具容錯(cuò)性和可擴(kuò)展性,它 可以用來處理源源不斷的消息,并將處理之后的結(jié)果保存到持久化介質(zhì)中。
2.連續(xù)計(jì)算(Continuous Computation)
Storm可以進(jìn)行連續(xù)查詢并把結(jié)果即時(shí)反饋給客戶,比如將Twitter上的熱門話題發(fā)送到客戶端。
3.分布式遠(yuǎn)程過程調(diào)用(Distributed RPC)
除此之外,Storm也被廣泛用于以下方面:
精確的廣告推送
實(shí)時(shí)日志的處理
一、Apache Hama
簡介:Apache Hama是一個(gè)純BSP(Bulk Synchronous Parallel)計(jì)算框架,模仿了Google的Pregel。用來處理大規(guī)模的科學(xué)計(jì)算,特別是矩陣和圖計(jì)算。
建立在Hadoop上的分布式并行計(jì)算模型。
基于 Map/Reduce 和 Bulk Synchronous 的實(shí)現(xiàn)框架。
運(yùn)行環(huán)境需要關(guān)聯(lián) Zookeeper、HBase、HDFS 組件。
Hama中有2個(gè)主要的模型:
– 矩陣計(jì)算(Matrix package)
– 面向圖計(jì)算(Graph package)
二、Apache Giraph
簡介:Apache Giraph是一個(gè)可伸縮的分布式迭代圖處理系統(tǒng),靈感來自BSP(bulk synchronous parallel)和Google的Pregel,與它們 區(qū)別于則是是開源、基于 Hadoop 的架構(gòu)等。
Giraph處理平臺適用于運(yùn)行大規(guī)模的邏輯計(jì)算,比如頁面排行、共享鏈接、基于個(gè)性化排行等。Giraph專注于社交圖計(jì)算,被Facebook作為其Open Graph工具的核心,幾分鐘內(nèi)處理數(shù)萬億次用戶及其行為之間的連接。
三、HaLoop
簡介:迭代的MapReduce,HaLoop——適用于迭代計(jì)算的Hadoop 。
Hadoop與HaLoop的不同
與Hadoop比較的四點(diǎn)改變:
提供了一套新的編程接口,更加適用于迭代計(jì)算;
HaLoop給迭代計(jì)算一個(gè)抽象的遞歸公式:
3.Task Scheduler也進(jìn)行了修改,使得任務(wù)能夠盡量滿足data locality
4.slave nodes對數(shù)據(jù)進(jìn)行cache并index索引,索引也以文件的形式保存在本地磁盤。
四、Twister
簡介:Twister, 迭代式MapReduce框架,Twister是由一個(gè)印度人開發(fā)的,其架構(gòu)如下:
在Twister中,大文件不會自動(dòng)被切割成一個(gè)一個(gè)block,因而用戶需提前把文件分成一個(gè)一個(gè)小文件,以供每個(gè)task處理。在map階段,經(jīng)過map()處理完的結(jié)果被放在分布式內(nèi)存中,然后通過一個(gè)broker network(NaradaBroking系統(tǒng))將數(shù)據(jù)push給各個(gè)reduce task(Twister假設(shè)內(nèi)存足夠大,中間數(shù)據(jù)可以全部放在內(nèi)存中);在reduce階段,所有reduce task產(chǎn)生的結(jié)果通過一個(gè)combine操作進(jìn)行歸并,此時(shí),用戶可以進(jìn)行條件判定, 確定迭代是否結(jié)束。combine后的數(shù)據(jù)直接被送給map task,開始新一輪的迭代。為了提高容錯(cuò)性,Twister每隔一段時(shí)間會將map task和reduce task產(chǎn)生的結(jié)果寫到磁盤上,這樣,一旦某個(gè)task失敗,它可以從最近的備份中獲取輸入,重新計(jì)算。
為了避免每次迭代重新創(chuàng)建task,Twister維護(hù)了一個(gè)task pool,每次需要task時(shí)直接從pool中取。在Twister中,所有消息和數(shù)據(jù)都是通過broker network傳遞的,該broker network是一個(gè)獨(dú)立的模塊,目前支持NaradaBroking和ActiveMQ。
一、Hadoop MapReduce
簡介:MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。概念”Map(映射)”和”Reduce(歸約)”,和它們的主要思想,都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。 當(dāng)前的軟件實(shí)現(xiàn)是指定一個(gè)Map(映射)函數(shù),用來把一組鍵值對映射成一組新的鍵值對,指定并發(fā)的Reduce(歸約)函數(shù),用來保證所有映射的鍵值對中的每一個(gè)共享相同的鍵組。
二、Berkeley Spark
簡介:Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的并行,Spark,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的map reduce的算法。
三、DataTorrent
簡介:DataTorrent基于Hadoop 2.x構(gòu)建,是一個(gè)實(shí)時(shí)的、有容錯(cuò)能力的數(shù)據(jù)流式處理和分析平臺,它使用本地Hadoop應(yīng)用程序,而這些應(yīng)用程序可以與執(zhí)行其它任務(wù),如批處理,的應(yīng)用程序共存。該平臺的架構(gòu)如下圖所示:
一、LevelDB
貢獻(xiàn)者:Google
簡介:Leveldb是一個(gè)google實(shí)現(xiàn)的非常高效的kv數(shù)據(jù)庫,目前的版本1.2能夠支持billion級別的數(shù)據(jù)量了。 在這個(gè)數(shù)量級別下還有著非常高的性能,主要?dú)w功于它的良好的設(shè)計(jì)。特別是LMS算法。
LevelDB 是單進(jìn)程的服務(wù),性能非常之高,在一臺4核Q6600的CPU機(jī)器上,每秒鐘寫數(shù)據(jù)超過40w,而隨機(jī)讀的性能每秒鐘超過10w。
此處隨機(jī)讀是完全命中內(nèi)存的速度,如果是不命中 速度大大下降。
二、RocksDB
貢獻(xiàn)者:facebook
簡介:RocksDB雖然在代碼層面上是在LevelDB原有的代碼上進(jìn)行開發(fā)的,但卻借鑒了Apache HBase的一些好的idea。在云計(jì)算橫行的年代,開口不離Hadoop,RocksDB也開始支持HDFS,允許從HDFS讀取數(shù)據(jù)。RocksDB支持一次獲取多個(gè)K-V,還支持Key范圍查找。LevelDB只能獲取單個(gè)Key。
RocksDB除了簡單的Put、Delete操作,還提供了一個(gè)Merge操作,說是為了對多個(gè)Put操作進(jìn)行合并。
RocksDB提供一些方便的工具,這些工具包含解析sst文件中的K-V記錄、解析MANIFEST文件的內(nèi)容等。RocksDB支持多線程合并,而LevelDB是單線程合并的。
三、HyperDex
貢獻(xiàn)者:Facebook
HyperDex是一個(gè)分布式、可搜索的鍵值存儲系統(tǒng),特性如下:
分布式KV存儲,系統(tǒng)性能能夠隨節(jié)點(diǎn)數(shù)目線性擴(kuò)展
吞吐和延時(shí)都能秒殺現(xiàn)在風(fēng)頭正勁的MonogDB,吞吐甚至強(qiáng)于Redis
使用了hyperspace hashing技術(shù),使得對存儲的K-V的任意屬性進(jìn)行查詢成為可能
四、TokyoCabinet
日本人Mikio Hirabayashi(平林干雄)開發(fā)的一款DBM數(shù)據(jù)庫。Tokyo Cabinet 是一個(gè)DBM的實(shí)現(xiàn)。這里的數(shù)據(jù)庫由一系列key-value對的記錄構(gòu)成。key和value都可以是任意長度的字節(jié)序列,既可以是二進(jìn)制也可以是字符串。這里沒有數(shù)據(jù)類型和數(shù)據(jù)表的概念。
當(dāng) 做為Hash表數(shù)據(jù)庫使用時(shí),每個(gè)key必須是不同的,因此無法存儲兩個(gè)key相同的值。提供了以下訪問方法:提供key,value參數(shù)來存儲,按 key刪除記錄,按key來讀取記錄,另外,遍歷key也被支持,雖然順序是任意的不能被保證。這些方法跟Unix標(biāo)準(zhǔn)的DBM,例如GDBM,NDBM 等等是相同的,但是比它們的性能要好得多(因此可以替代它們) 。下一代KV存儲系統(tǒng),支持strings、integers、floats、lists、maps和sets等豐富的數(shù)據(jù)類型。
五、Voldemort
Voldemort是一個(gè)分布式鍵值存儲系統(tǒng),是Amazon’s Dynamo的一個(gè)開源克隆。特性如下:
支持自動(dòng)復(fù)制數(shù)據(jù)到多個(gè)服務(wù)器上。
支持?jǐn)?shù)據(jù)自動(dòng)分割所以每個(gè)服務(wù)器只包含總數(shù)據(jù)的一個(gè)子集。
提供服務(wù)器故障透明處理功能。
支持可撥插的序化支持,以實(shí)現(xiàn)復(fù)雜的鍵-值存儲,它能夠很好的5.集成常用的序化框架如:Protocol Buffers、Thrift、Avro和Java Serialization。
數(shù)據(jù)項(xiàng)都被標(biāo)識版本能夠在發(fā)生故障時(shí)盡量保持?jǐn)?shù)據(jù)的完整性而不會影響系統(tǒng)的可用性。
每個(gè)節(jié)點(diǎn)相互獨(dú)立,互不影響。
支持可插拔的數(shù)據(jù)放置策略
六、Amazon Dynamo
貢獻(xiàn)者:亞馬遜
簡介:Amazon Dynamo 是一個(gè)經(jīng)典的分布式Key-Value 存儲系統(tǒng),具備去中心化,高可用性,高擴(kuò)展性的特點(diǎn),但是為了達(dá)到這個(gè)目標(biāo)在很多場景中犧牲了一致性。Dynamo在Amazon中得到了成功的應(yīng)用,能夠跨數(shù)據(jù)中心部署于上萬個(gè)結(jié)點(diǎn)上提供服務(wù),它的設(shè)計(jì)思想也被后續(xù)的許多分布式系統(tǒng)借鑒。如近來火熱的Cassandra,實(shí)際上就是基本照搬了Dynamo的P2P架構(gòu),同時(shí)融合了BigTable的數(shù)據(jù)模型及存儲算法。
七、Tair
貢獻(xiàn)者:淘寶
簡介:tair 是淘寶自己開發(fā)的一個(gè)分布式 key/value 存儲引擎. tair 分為持久化和非持久化兩種使用方式. 非持久化的 tair 可以看成是一個(gè)分布式緩存. 持久化的 tair 將數(shù)據(jù)存放于磁盤中. 為了解決磁盤損壞導(dǎo)致數(shù)據(jù)丟失, tair 可以配置數(shù)據(jù)的備份數(shù)目, tair 自動(dòng)將一份數(shù)據(jù)的不同備份放到不同的主機(jī)上, 當(dāng)有主機(jī)發(fā)生異常, 無法正常提供服務(wù)的時(shí)候, 其于的備份會繼續(xù)提供服務(wù).tair 的總體結(jié)構(gòu)
tair 作為一個(gè)分布式系統(tǒng), 是由一個(gè)中心控制節(jié)點(diǎn)和一系列的服務(wù)節(jié)點(diǎn)組成. 我們稱中心控制節(jié)點(diǎn)為config server. 服務(wù)節(jié)點(diǎn)是data server. config server 負(fù)責(zé)管理所有的data server, 維護(hù)data server的狀態(tài)信息. data server 對外提供各種數(shù)據(jù)服務(wù), 并以心跳的形式將自身狀況匯報(bào)給config server. config server是控制點(diǎn), 而且是單點(diǎn), 目前采用一主一備的形式來保證其可靠性. 所有的 data server 地位都是等價(jià)的.八、Apache Accumulo
Apache Accumulo 是一個(gè)可靠的、可伸縮的、高性能的排序分布式的 Key-Value 存儲解決方案,基于單元訪問控制以及可定制的服務(wù)器端處理。Accumulo使用 Google BigTable 設(shè)計(jì)思路,基于 Apache Hadoop、Zookeeper 和 Thrift 構(gòu)建。
九、Redis
Redis是一個(gè)高性能的key-value存儲系統(tǒng),和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中,區(qū)別的是Redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了主從同步。
Redis的出現(xiàn),很大程度補(bǔ)償了memcached這類key/value存儲的不足,在部分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用。它提供了Python、Ruby、Erlang、PHP客戶端,使用很方便。
一、OceanBase
貢獻(xiàn)者:阿里巴巴
簡介:OceanBase是一個(gè)支持海量數(shù)據(jù)的高性能分布式數(shù)據(jù)庫系統(tǒng),實(shí)現(xiàn)了數(shù)千億條記錄、數(shù)百TB數(shù)據(jù)上的跨行跨表事務(wù),由淘寶核心系統(tǒng)研發(fā)部、運(yùn)維、DBA、廣告、應(yīng)用研發(fā)等部門共同完成。在設(shè)計(jì)和實(shí)現(xiàn)OceanBase的時(shí)候暫時(shí)摒棄了不緊急的DBMS的功能,例如臨時(shí)表,視圖(view),研發(fā)團(tuán)隊(duì)把有限的資源集中到關(guān)鍵點(diǎn)上,當(dāng)前 OceanBase主要解決數(shù)據(jù)更新一致性、高性能的跨表讀事務(wù)、范圍查詢、join、數(shù)據(jù)全量及增量dump、批量數(shù)據(jù)導(dǎo)入。
目前OceanBase已經(jīng)應(yīng)用于淘寶收藏夾,用于存儲淘寶用戶收藏條目和具體的商品、店鋪信息,每天支持4~5千萬的更新操作。等待上線的應(yīng)用還包括CTU、SNS等,每天更新超過20億,更新數(shù)據(jù)量超過2.5TB,并會逐步在淘寶內(nèi)部推廣。
OceanBase 0.3.1在Github開源,開源版本為Revision:12336。
聯(lián)系客服