挑戰(zhàn)傳統(tǒng)關系型數(shù)據(jù)庫:Facebook圖形數(shù)據(jù)庫TAO揭秘
在Facebook上,人們已經(jīng)形成了一個復雜的社會關系網(wǎng)絡,如何去存儲、擴展和展示這個網(wǎng)絡是Facebook工程師的一大難題。早在幾年前,F(xiàn)acebook的工程師就意識到:關系型數(shù)據(jù)庫的老方法,正在逐步降低基礎設施和代碼的效率。2009年,他們開始設計一種新的數(shù)據(jù)庫體系結(jié)構,也就是分布式數(shù)據(jù)庫TAO(The Associations and Objects)。6月25日,F(xiàn)acebook在官方博客上公布了支持其基礎設施細節(jié)。
Facebook的軟件工程師Mark Marchukov在博客中表示他們之所以創(chuàng)建TAO的原因之一在于同時使用MySQL和Memcached讀取數(shù)據(jù)太復雜了。產(chǎn)品工程師要工作在兩種完全不同的數(shù)據(jù)模型之間:大規(guī)模的MySQL服務器用關系表存儲持久數(shù)據(jù),類似數(shù)量的緩存數(shù)據(jù)服務器用來存儲SQL查詢到的鍵值對。即便是封裝在數(shù)據(jù)訪問庫中最常見的操作,也需要產(chǎn)品工程師對系統(tǒng)內(nèi)部有充分的了解,才能高效地使用memcache-MySQL組合。
TAO的圖型架構在信息組織方面類似于Facebook的圖搜索工具,它將世界看作由節(jié)點(對象,即人、地點和事物)和邊(關聯(lián),即他們之間的關系)組成的圖。隨著數(shù)據(jù)量的增大,保持數(shù)據(jù)的關系模式變得不再重要,TAO及其對應的API應運而生。

Marchukov認為TAO最大的突破在于實現(xiàn)了圖解模型,F(xiàn)acebook的主要工作負載在于讀取數(shù)據(jù),TAO證明了圖數(shù)據(jù)模型很適合這類查詢操作較多的網(wǎng)站。實際上,類似Neo4j的圖形數(shù)據(jù)庫一直備受關注,因為它能有效表示人際關系。
Marchukov 在博客中提到,TAO不僅大規(guī)模實現(xiàn)了圖數(shù)據(jù)結(jié)構,也使用MySQL實現(xiàn)硬盤上的持久存儲,同時要保證數(shù)據(jù)在各個數(shù)據(jù)中心的最終一致性,用戶才能獲取“新鮮事”。

TAO服務運行在大量的服務器集群上,這些分布在不同地理位置的集群構成一個樹形網(wǎng)絡。有另外的集群用來持久存儲對象和對象關聯(lián),RAM和閃存實現(xiàn)緩存。這種分層結(jié)構在單獨進行不同類型的集群擴展時更方便,也能有效利用服務器硬件。