圖資料庫優點有什麼?使用圖(或者網)的方式來表達現實世界的關係很直接、自然,易於建模。比如某人喜歡看某電影,就可以建立一條邊連線這個人和這部電影,這條邊就叫做“喜歡”邊,同時這個人還可以有其它邊,比如“朋友”邊、“同學”邊等,同樣這個電影也可以有其它邊,比如“導演”邊、“主演”邊等,這樣就構建了自然的關係網。圖資料庫可以很高效的插入大量資料。圖資料庫面向的應用領域資料量可能都比較大,比如知識圖譜、社交關係、風控關係等,總資料量級別一般在億或十億以上,有的甚至達到百億邊。mysql不做分表分庫的情況下插入百萬資料基本就慢到不行,圖資料庫基本能勝任億級以上的資料,比如neo4j、titan(janus)、hugegraph等圖資料庫,持續插入十億級的資料基本還能保持在一個較高的速度。圖資料庫可以很高效的查詢關聯資料。傳統關係型資料庫不擅長做關聯查詢,特別是多層關聯(比如查我的好友的好友有哪些人),因為一般來說都需要做表連線,表連線是一個很昂貴的操作,涉及到大量的IO操作及記憶體消耗。圖資料庫對關聯查詢一般都進行針對性的最佳化,比如儲存模型上、資料結構、查詢演算法等,防止區域性資料的查詢引發全部資料的讀取。圖資料庫提供了針對圖檢索的查詢語言,比如Gremlin、Cypher等圖資料庫語言。圖查詢語言大大方便了關聯分析業務的持續開發,傳統方案在需求變更時往往要修改資料儲存模型、修改複雜的查詢指令碼,圖資料庫已經把業務表達抽象好了,比如上面的2層好友查詢,Gremlin實現為g.V(me).out("friend").out("friend"),如果需要改為2層同學查詢,那調整一下把好友換為同學即可g.V(me).out("classmate").out("classmate")。圖資料庫提供了專業的分析演算法、工具。比如ShortestPath、PageRank、PersonalRank、Louvain等等,不少圖資料庫還提供了資料批次匯入工具,提供了視覺化的圖顯示介面,使得資料的分析結果更加直觀展示出來。是否可以用成熟的key-value資料庫封裝一下來滿足大部分需求呢?
當然可以的,那本質上就是在做一個圖資料庫,但是代價還是很大的。其實上面提到的titan、hugegraph就是基於KV資料庫作為後端儲存的。
圖資料庫優點有什麼?使用圖(或者網)的方式來表達現實世界的關係很直接、自然,易於建模。比如某人喜歡看某電影,就可以建立一條邊連線這個人和這部電影,這條邊就叫做“喜歡”邊,同時這個人還可以有其它邊,比如“朋友”邊、“同學”邊等,同樣這個電影也可以有其它邊,比如“導演”邊、“主演”邊等,這樣就構建了自然的關係網。圖資料庫可以很高效的插入大量資料。圖資料庫面向的應用領域資料量可能都比較大,比如知識圖譜、社交關係、風控關係等,總資料量級別一般在億或十億以上,有的甚至達到百億邊。mysql不做分表分庫的情況下插入百萬資料基本就慢到不行,圖資料庫基本能勝任億級以上的資料,比如neo4j、titan(janus)、hugegraph等圖資料庫,持續插入十億級的資料基本還能保持在一個較高的速度。圖資料庫可以很高效的查詢關聯資料。傳統關係型資料庫不擅長做關聯查詢,特別是多層關聯(比如查我的好友的好友有哪些人),因為一般來說都需要做表連線,表連線是一個很昂貴的操作,涉及到大量的IO操作及記憶體消耗。圖資料庫對關聯查詢一般都進行針對性的最佳化,比如儲存模型上、資料結構、查詢演算法等,防止區域性資料的查詢引發全部資料的讀取。圖資料庫提供了針對圖檢索的查詢語言,比如Gremlin、Cypher等圖資料庫語言。圖查詢語言大大方便了關聯分析業務的持續開發,傳統方案在需求變更時往往要修改資料儲存模型、修改複雜的查詢指令碼,圖資料庫已經把業務表達抽象好了,比如上面的2層好友查詢,Gremlin實現為g.V(me).out("friend").out("friend"),如果需要改為2層同學查詢,那調整一下把好友換為同學即可g.V(me).out("classmate").out("classmate")。圖資料庫提供了專業的分析演算法、工具。比如ShortestPath、PageRank、PersonalRank、Louvain等等,不少圖資料庫還提供了資料批次匯入工具,提供了視覺化的圖顯示介面,使得資料的分析結果更加直觀展示出來。是否可以用成熟的key-value資料庫封裝一下來滿足大部分需求呢?
當然可以的,那本質上就是在做一個圖資料庫,但是代價還是很大的。其實上面提到的titan、hugegraph就是基於KV資料庫作為後端儲存的。