一、圖數(shù)據(jù)庫、mysql和kv數(shù)據(jù)庫有什么不同
區(qū)別還是很大的,最根本的區(qū)別還是底層存儲結(jié)構(gòu)上的區(qū)別。
圖數(shù)據(jù)庫應(yīng)該就是使用圖作為底層存儲結(jié)構(gòu)。在結(jié)構(gòu)上關(guān)系上應(yīng)該是更強(qiáng)大的。
mysql之類的關(guān)系數(shù)據(jù)庫以表(直觀上的行列)作為操作對象,底層結(jié)構(gòu)索引都是用來保證對表的快速操作的,上層接口上是線性的。
kv數(shù)據(jù)庫嚴(yán)格來說不是數(shù)據(jù)庫,只是一種存儲的結(jié)構(gòu),只是v部分可以存儲多種數(shù)據(jù),本質(zhì)的查詢部分還是key,這部分一般只是一種結(jié)構(gòu)(哈希/BST)。名列前茅層key是查詢接口,第二層的v是結(jié)構(gòu)相關(guān)的。它的真正的高效檢索部分是名列前茅部分。可以等同于只有多列的表,但列與列之間沒有行約束關(guān)系。
另外,雖然圖數(shù)據(jù)庫理論上結(jié)構(gòu)上有優(yōu)勢但實際上應(yīng)該說還是關(guān)系數(shù)據(jù)更有操作上的優(yōu)勢,這主要從信息角度不管是哪種數(shù)據(jù)庫都不能解決復(fù)雜的數(shù)據(jù)查詢問題。圖結(jié)構(gòu)和表結(jié)構(gòu)沒有本質(zhì)區(qū)別,但操作對象上表達(dá)形式上要復(fù)雜的,表結(jié)構(gòu)具有操作上的直觀優(yōu)勢,更易于理解和使用。比對kv結(jié)構(gòu),kv的優(yōu)勢是結(jié)構(gòu)是松散的更少的約束性,修改更方便。
kv數(shù)據(jù)庫封裝成數(shù)據(jù)庫是不太可能的,這是因為基礎(chǔ)結(jié)構(gòu)本質(zhì)的不同。相比關(guān)系型數(shù)據(jù)庫它還少了相當(dāng)多的結(jié)構(gòu)和特征。
延伸閱讀:
二、圖數(shù)據(jù)庫優(yōu)點有什么
使用圖(或者網(wǎng))的方式來表達(dá)現(xiàn)實世界的關(guān)系很直接、自然,易于建模。比如某人喜歡看某電影,就可以建立一條邊連接這個人和這部電影,這條邊就叫做“喜歡”邊,同時這個人還可以有其它邊,比如“朋友”邊、“同學(xué)”邊等,同樣這個電影也可以有其它邊,比如“導(dǎo)演”邊、“主演”邊等,這樣就構(gòu)建了自然的關(guān)系網(wǎng)。圖數(shù)據(jù)庫可以很高效的插入大量數(shù)據(jù)。圖數(shù)據(jù)庫面向的應(yīng)用領(lǐng)域數(shù)據(jù)量可能都比較大,比如知識圖譜、社交關(guān)系、風(fēng)控關(guān)系等,總數(shù)據(jù)量級別一般在億或十億以上,有的甚至達(dá)到百億邊。mysql不做分表分庫的情況下插入百萬數(shù)據(jù)基本就慢到不行,圖數(shù)據(jù)庫基本能勝任億級以上的數(shù)據(jù),比如neo4j、titan(janus)、hugegraph等圖數(shù)據(jù)庫,持續(xù)插入十億級的數(shù)據(jù)基本還能保持在一個較高的速度。圖數(shù)據(jù)庫可以很高效的查詢關(guān)聯(lián)數(shù)據(jù)。傳統(tǒng)關(guān)系型數(shù)據(jù)庫不擅長做關(guān)聯(lián)查詢,特別是多層關(guān)聯(lián)(比如查我的好友的好友有哪些人),因為一般來說都需要做表連接,表連接是一個很昂貴的操作,涉及到大量的IO操作及內(nèi)存消耗。圖數(shù)據(jù)庫對關(guān)聯(lián)查詢一般都進(jìn)行針對性的優(yōu)化,比如存儲模型上、數(shù)據(jù)結(jié)構(gòu)、查詢算法等,防止局部數(shù)據(jù)的查詢引發(fā)全部數(shù)據(jù)的讀取。