原生圖數(shù)據(jù)庫的15條規(guī)則
譯文【51CTO.com快譯】就像復(fù)雜的系統(tǒng)網(wǎng)格或空中交通管制圖,圖形數(shù)據(jù)庫用節(jié)點(diǎn)和連接組成的網(wǎng)絡(luò)(名為標(biāo)記屬性圖)來表示。節(jié)點(diǎn)顯示為圓形或正方形,代表人員、產(chǎn)品、公司或訂單等實(shí)體。
在Neo4j中,數(shù)據(jù)庫節(jié)點(diǎn)之間的連接名為關(guān)系,那些關(guān)系與它們連接的節(jié)點(diǎn)一樣重要。
每個(gè)關(guān)系都是定向的,知道開始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn),而每個(gè)節(jié)點(diǎn)知道與之存在入站或出站關(guān)系的所有其他節(jié)點(diǎn)——這種優(yōu)勢(shì)名為免索引鄰接。
原生圖形存儲(chǔ)和處理
但是屬性圖模型不僅僅是圖形,它實(shí)際上描述了你如何訪問和查詢數(shù)據(jù)庫中的信息。
為了最大限度地提高效率和性能,圖形數(shù)據(jù)庫平臺(tái)必須存儲(chǔ)和訪問出現(xiàn)在數(shù)據(jù)庫屬性圖中的數(shù)據(jù)。采用這種方法的數(shù)據(jù)庫平臺(tái)名為原生圖形數(shù)據(jù)庫。
非原生圖形數(shù)據(jù)庫付出的代價(jià)
對(duì)于連接、復(fù)雜或不斷變化的數(shù)據(jù)集而言,非原生圖形數(shù)據(jù)庫方法因性能、完整性、易用性和可擴(kuò)展性方面的風(fēng)險(xiǎn)而存在固有的缺陷。
關(guān)系數(shù)據(jù)庫附加在額外的處理層上,這些處理層將圖形查詢轉(zhuǎn)換為底層數(shù)據(jù)庫技術(shù)使用的基于關(guān)系表的存儲(chǔ)和處理模型。結(jié)果是性能和應(yīng)用程序響應(yīng)速度大大降低,常常導(dǎo)致圖形應(yīng)用完全無法使用。
大多數(shù)NoSQL數(shù)據(jù)庫技術(shù)添加了類似的轉(zhuǎn)換層,創(chuàng)建圖形應(yīng)用軟件時(shí)效率低下,再次導(dǎo)致性能下降,甚至可能導(dǎo)致圖形查詢結(jié)果損壞或失敗。
原生圖形數(shù)據(jù)庫的15條規(guī)則
圖形數(shù)據(jù)庫管理系統(tǒng)必須完全通過原生數(shù)據(jù)存儲(chǔ)和圖形處理方法來建模、管理和訪問數(shù)據(jù)及其關(guān)系。想成為原生圖形DBMS,一項(xiàng)技術(shù)必須符合這些基本規(guī)則。
關(guān)系數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫因在非圖形數(shù)據(jù)上添加圖形功能而違反規(guī)則,飽受性能、延遲、一致性和數(shù)據(jù)損壞等問題的困擾。
1. 原生存儲(chǔ)和建模。以關(guān)系圖的形式存儲(chǔ)和建模數(shù)據(jù),而不是采用行和列、索引記錄或任何其他結(jié)構(gòu)的形式。
2. 原生圖形管理。完全通過原生圖形功能,而不是通過位于非圖形存儲(chǔ)或處理基礎(chǔ)上的圖形邏輯層來管理數(shù)據(jù)和關(guān)系。
3. 一等公民的關(guān)系。將圖形數(shù)據(jù)元素之間的關(guān)系視為一等公民的數(shù)據(jù)庫元素,附帶圖形數(shù)據(jù)庫引擎使用的方向和量化屬性。
4. 實(shí)時(shí)可用性。實(shí)時(shí)查詢數(shù)據(jù),不管其底層關(guān)系的數(shù)量或復(fù)雜性如何。
5. 免索引鄰接。將每個(gè)數(shù)據(jù)元素直接鏈接到入站和出站關(guān)系,因而每秒可以遍歷數(shù)百萬條記錄。
6. 全面的數(shù)據(jù)管理。全面處理數(shù)據(jù)和底層關(guān)系的檢索、插入、修改和刪除。
7. 離散管理。添加和修改數(shù)據(jù)和關(guān)系,不必更改現(xiàn)有的數(shù)據(jù)庫模式、數(shù)據(jù)或關(guān)系。
8. Cypher支持。全面支持Cypher,這是行業(yè)領(lǐng)導(dǎo)者積極接受的一種開放標(biāo)準(zhǔn)查詢語言。
9. 非顛覆。禁止繞過openCypher或破壞圖形數(shù)據(jù)庫實(shí)施的完整性規(guī)則和約束來企圖訪問或修改數(shù)據(jù)。
10. ACID事務(wù)。確保所有事務(wù)均為ACID,即遵循原子性、一致性、隔離性和耐久性的規(guī)則,以保證圖形和數(shù)據(jù)的一致性。
11. 一致的讀取。確保讀取和重新讀取數(shù)據(jù)的用戶始終看到相同的數(shù)據(jù),除非其他用戶執(zhí)行干預(yù)更新。
12. 一致的寫入。確保寫入和更新數(shù)據(jù)的用戶始終看到最新數(shù)據(jù),除非其他用戶執(zhí)行干預(yù)更新。
13. 完整性獨(dú)立性。將數(shù)據(jù)完整性的約束存儲(chǔ)在圖形數(shù)據(jù)目錄中,而不是存儲(chǔ)在應(yīng)用程序中。
14. 數(shù)據(jù)獨(dú)立性。底層圖形數(shù)據(jù)存儲(chǔ)表示或訪問方法變化時(shí),應(yīng)用程序在邏輯上不受影響。
15. 無縫表示。以統(tǒng)一的方式存儲(chǔ)和顯示數(shù)據(jù)關(guān)系圖,為用戶提供數(shù)據(jù)庫整個(gè)圖形模型的無縫視圖,不管數(shù)據(jù)存儲(chǔ)在何處。
關(guān)系數(shù)據(jù)庫技術(shù)死了嗎?
這一切是否意味著關(guān)系數(shù)據(jù)庫技術(shù)的時(shí)代即將結(jié)束?當(dāng)然不是。
關(guān)系方法適用于擁有靜態(tài)模式的表格數(shù)據(jù),但不適用于高度關(guān)聯(lián)或變化的數(shù)據(jù)集的需求。如果是通過圖形數(shù)據(jù)遍歷多個(gè)級(jí)別的查詢(比如“朋友的朋友的朋友”查詢),由此生成的大量表索引查找會(huì)使關(guān)系數(shù)據(jù)庫性能降低到不可接受的程度。
形成鮮明對(duì)比的是,圖形數(shù)據(jù)庫使用免索引鄰接,以亞秒級(jí)的響應(yīng)時(shí)間遍歷數(shù)百萬條數(shù)據(jù)記錄,即使那些查詢挖掘的數(shù)據(jù)其深度有好幾層。
原文標(biāo)題:15 Rules of a Native Graph Database,作者:Jocelyn Hoppa
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】