Google 開源的 Cayley 圖資料庫有什麼亮點?
google/cayley · GitHub
和類似項目比起來
Cayley是14年6月21日才登上GitHub的開源圖資料庫項目,受到FreeBase和Google知識圖譜背後圖資料庫的啟發。主要特點是:
1用Go語言編寫2RESTful API 或者REPL3內置查詢編輯器和可視化器
4可以用JavaScript(通過Gremlin風格的圖對象)或者MQL語言來查詢5後端存儲可以用LevelDB(單機)、MongoDB或者內存6模塊化設計,語言和後端都很容易擴展7良好的測試覆蓋8儘可能高性能初步性能測試表明,在普通PC硬體和硬碟上,LevelDB跑1.34億三元組毫無壓力,多跳交叉查詢(比如有X和Y兩位影星同時出演的電影)只需150ms。值得注意的是,雖然項目在Github上放在Google名下,但項目自己描述文字說得很清楚,這不是一個Google官方項目。
Not a Google project, but created and maintained by a Googler, with permission from and assignment to Google查了一下,項目的主要作者Barak Michener是Google音樂研究團隊的工程師。2010年隨Metaweb收購而加入Google公司。
Metaweb本身是一個很有趣的公司。Hacker News的討論有很多圖資料庫方面的信息,包括Orly。瀉藥。
之前看到過這個項目,是Google工程師的個人項目,並非官方。
個人覺得最大的亮點是:能接入各種類型的存儲。用KV很平常了,竟然還有PG/MySQL,竟然還有ElasticSearch,確實大開眼界。也可以推斷,這個項目更多的是在API層面做了一些封裝,並沒有在核心存儲上去關注怎麼存。(雖然JanusGraph/Titan也可以接各種單機、分散式的KV,但好歹要求模型是BigTable,並在此之上定義了統一的存儲格式)。
另外,查詢語言上沒有目前業界主流的語言。
當然,從可以嵌入Go應用、支持Restful介面、內置可視化等來看,仍然是一個小而美的項目。
總體而言,生產應該是上不了,玩玩應該挺有意思。
另外,這裡也有一些其他類型的圖資料庫的比較:GraphSQL 相比其它圖資料庫的優勢? - bop的回答 - 知乎
https://www.zhihu.com/question/41621125/answer/232502537。
推薦這個視頻,我英語渣,反反覆復看了4,5遍
https://www.youtube.com/watch?v=-9kWbPmSyCI我理解的亮點就是存儲方式不一樣。不是直接存的節點和邊。
用作者的話說,大概是:Graphs are tables,tables are graphs.
存的是一堆集合。(後端存儲是memstore的時候是這麼存的,用別的後端存儲的時候不確定是不是這樣)
讀入RDF文件
按照每個Subject Predicate Object的內容,用一大堆集合來存。Cayley能支持多種後端,就是用各種後端(主要是k-v資料庫)去實現集合。
比如這個例子
t.AddQuad(quad.Make("food", "is", "good", nil)) //QuadId 1
t.AddQuad(quad.Make("phrase of the day", "is of course", "Hello World!", nil))//QuadId 2
t.AddQuad(quad.Make("cats", "are", "awesome", nil))//QuadId 3
t.AddQuad(quad.Make("cats", "are", "scary", nil))//QuadId 4
t.AddQuad(quad.Make("cats", "want to", "kill you", nil))//QuadId 5
就會建出一堆QuadId的集合
Subject 是 food的集合 Predicate是 is的集合 Object是good的集合 ;插入QuadId1
...
Subject是cats的集合 Predicate是are的集合 Object是awesome的集合;插入QuadId3
Object是scary的集合,前面建的 Subject cat和Predicate are;插入QuadId4
Predicate是want to的集合 Object是kill you的集合
這樣對圖的運算就轉成了對集合的運算。好處應該是性能強?
壞處是刪除某個Quadid的時候會很慢吧,要遍歷一大堆集合?
因為這種大圖常見的操作就是找到滿足某特徵的某類頂點嘛,
它這種搞法相當於這些結果都提前存好了。
然後找到這些節點沿著某條邊走一步的所有節點,就變成了
含有某節點的Quad集合 交上 含有那條邊的Quad集合
得到的交集對每個Quad取Object。
就完事了。避免了遍歷整個大圖。
另外的亮點就是迭代器優化吧。Cayley定義了一堆集合上的運算。然後查詢語句就會變成由這些運算組成的抽象迭代器樹,然後不同後端在實現這個抽象迭代器樹的時候可以進行針對性的優化。
還有就是前端查詢語言比較好學吧。Javascript實現的Gremlin,就10幾個基本的函數,10分鐘也就學會了。
這還有個作者解釋的帖子。
11/17/14 :: What is Cayley conceptually?這有一些例子可以debug玩玩的
cayley/examples at master · cayleygraph/cayley · GitHub附1 不知道項目里的S表達式查詢語言啥時候會實裝。。。
附2 視頻里第一張ppt上就有個範疇論的圖,總聽你們說範疇論多麼重要,沒當回事。現在真是哇的一聲哭了出來。智商低是硬傷。。。
推薦閱讀:
※scylladb專欄開篇
※【操作教程】利用YCSB測試巨杉資料庫性能
※新財年,阿里雲表格存儲還想再找幾個專家
※國產資料庫發展現狀分析