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

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

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