天天看點

taobao開源資料庫-OceanBase開源了 

OceanBase是什麼

OceanBase是一個支援海量資料的高性能分布式資料庫系統,實作了數千億條記錄、數百TB資料上的跨行跨表事務,由淘寶核心系統研發部、運維、DBA、廣告、應用研發等部門共同完成。

OceanBase解決什麼問題

許多公司的核心資産是各種各樣的商業資料,例如淘寶的商品、交易、訂單、購物愛好等等,這些資料通常是結構化的,并且資料之間存在各種各樣的關聯,傳統的 關系資料庫曾經是這些資料的最佳載體。然而,随着業務的快速發展,這些資料急劇膨脹,記錄數從幾千萬條增加到數十億條,資料量從百GB增加到數TB,未來 還可能增加到數千億條和數百TB,傳統的關系型資料庫已經無法承擔如此海量的資料。OceanBase解決不斷增加的結構化資料存儲與查詢的問題。
從Eric Brewer教授的CAP(一緻性C: Consistency, 可用性A: Availability,分區容錯性P: Tolerance of network Partition)理論角度分析,作為電子商務企業,淘寶和其他公司的業務對一緻性和可用性的要求高于分區容錯性,資料特征是資料總量龐大且逐漸增加, 機關時間内的資料更新量并不大,但實時性要求很高。這就要求我們提供一套更加偏重于支援CA特性的系統,同時兼顧可分區性,并且在實時性、成本、性能等方 面表現良好。

OceanBase的特點

OceanBase功能

OceanBase設計和實作的時候暫時摒棄了不緊急的DBMS的功能,例如臨時表,視圖(view),研發團隊把有限的資源集中到關鍵點上,目前 OceanBase主要解決資料更新一緻性、高性能的跨表讀事務、範圍查詢、join、資料全量及增量dump、批量資料導入。

OceanBase資料通路特點

雖然資料總量比較大,但跟許多行業一樣,淘寶業務一段時間(例如小時或天)内資料的增删改是有限的(通常一天不超過幾千萬次到幾億次),根據這個特 點,OceanBase把一段時間内的增删改等修改操作以增量形式記錄下來(稱之為動态資料,通常儲存在記憶體中),這樣也使得了主體資料在一段時間内保持 了相對穩定(稱之為基準資料)。
由于動态資料相對較小,通常情況下,OceanBase把它儲存在獨立的伺服器UpdateServer的記憶體中。以記憶體儲存增删改記錄極大地提高了系統 寫事務的性能。此外,假如每條修改平均消耗100 Bytes,那麼10GB記憶體可以記錄100M(即1億)條修改,且擴充UpdateServer記憶體即增加了記憶體中容納的修改量。不僅如此,由于當機後 的記憶體表不再修改,它也可以轉換成sstable格式并儲存到SSD固态盤或磁盤上。轉儲到SSD固态盤後所占記憶體即可釋放,并仍然可以提供較高性能的讀 服務,這也緩解了極端情況下UpdateServer的記憶體需求。為了應對機器故障,動态資料伺服器UpdateServer寫commit log并采取雙機(乃至多機)熱備。由于UpdateServer的主備機是同步的,是以備機也可同時提供讀服務。
因為基準資料相對穩定,OceanBase把它按照主鍵(primary key,也稱為row key)分段(即tablet)後儲存多個副本(一般是3個)到多台機器(ChunkServer)上,避免了單台機器故障導緻的服務中斷,多個副本也提 升了系統服務能力。單個tablet的尺寸可以根據應用資料特點進行配置,相對配置過小的tablet會合并,過大的tablet則會分裂。
由于tablet按主鍵分塊連續存放,是以OceanBase按主鍵的範圍查詢對應着連續的磁盤讀,十分高效。
對于已經當機/轉儲的動态資料,OceanBase的ChunkServer會在自己不是太繁忙的時候啟動基準資料與當機/轉儲記憶體表的合并,并生成新的基準資料。這種合并過程其實是一種範圍查詢,是一串連續的磁盤讀和連續的磁盤寫,也是很高效的。
傳統DBMS提供了強大的事務性、良好的一緻性和很短的查詢修改響應時間,但資料規模受到嚴重制約,缺乏擴充性;現代雲計算提供了極大的資料規模、良好的 擴充性,但缺乏跨行跨表事務、資料一緻性也較弱、查詢修改響應時間通常也較長,OceanBase的設計和實作融合了二者的優勢:

OceanBase目前在淘寶的應用

OceanBase現在已經應用于淘寶收藏夾,用于存儲淘寶使用者收藏條目和具體的商品、店鋪資訊,每天支援4~5千萬的更新操作。等待上線的應用還包括CTU、SNS等,每天更新超過20億,更新資料量超過2.5TB,并會逐漸在淘寶内部推廣,也期待外部合作者。

taobao也終于出開源資料庫了,關注下,有時間來嘗試下

關于OceanBase的詳細位址如下:http://code.taobao.org/trac/OceanBase/wiki/intro