可能很多同學之前沒有接觸過圖數據庫,Neo4j就是一個圖數據庫,首先對Neo4j做一個初步的介紹: Neo4j是一個——面向網絡的數據庫——基于磁盤的、具備完全的事務特性的java持久化引擎,但是它將結構化數據存儲在網絡上而不是表中。網絡(從數學角度叫做圖)是一個靈活的數據結構,可以應用更加敏捷和快速的開發模式。
它有以下一些基本特點: 1)、Neo4j是一個開源的圖數據庫 2)、完全兼容ACID,即:原子性、一致性、隔離性、持久性 3)、支持數十億個節點 4)、用于存儲復雜的數據,可以減少建立中間表來維持關系 5)、兩種部署方式:嵌入式和服務器式
針對圖中的一些基本概念: node : 節點 relationships : 關系,也就是圖中的邊,注意是有向邊 PRoperties : 屬性,針對node/relationship都可以設置property Traversal : 圖遍歷工具 Indexes : 索引
這里有列出了一些與關系型數據庫對應的概念方便理解: 
其中: 節點:存儲自己的第一個屬性的指針和第一個關系指針 關系:存儲以這個節點為起始節點的其他關系。 保存:Node的Relationship使用一個雙向列表來保存的,可以方便的找到關系的from-to-Node。
Traversal(遍歷) Order : 對應的圖的遍歷算法 DEPTH_FIRST : 深度優先搜索,就是找到第一個節點,遞歸的一直往下找,直到找不到合適的節點后,才進行回溯 BREADTH_FIRST : 廣度優先搜索 舉個栗子:
圖中: 深度優先:A、B、D、E、I、C、F、G、H 廣度優先:A、B、C、D、E、F、G、H、I
Paths(路徑,從一個節點到另一個節點的所有的到達路徑) 路徑是一個或多個節點通過關系連接起來的產物,例如得到圖譜查詢或者遍歷的結果。
Schema(模式,類似存儲數據的結構) neo4j是一個無模式或者less模式的圖譜數據庫,像mongodb,solr,lucene或者es一樣,你可以使用它不需要定義任何schema
Indexes(索引) 遍歷圖通過需要大量的隨機讀寫,如果沒有索引,則可能意味著每次都是全圖掃描,這樣效率非常低下,為了獲得更好的性能,我們可以在字段屬性上構建索引,這樣任何查詢操作都會使用索引,從而大幅度提升seek性能, 構建索引是一個異步請求,并不會立刻生效,會再后臺創建直至成功后,才能最終生效。如果創建失敗,可以重建索引,先刪除索引,在創建即可,然后從log里面找出創建失敗的原因然后分析。
Constraints(約束) 約束可以定義在某個字段上,限制字段值唯一,創建約束會自動創建索引。
不同于傳統的關系數據庫管理系統,Neo4j是一個無架構的數據庫,在開始添加數據之前,你并不需要定義表和關系,一個節點可以具有你喜歡的任何屬性,任何節點都可以與任何其他節點建立關系。neo4j數據庫中的數據模型隱含在它存儲的數據中,而不是將數據模型定義為數據庫本身的一個部分。它是你想要存入數據的一個描述,而不是數據庫的一系列方法來限制將要存儲的內容。
總結: 之前就一直在看圖數據庫的相關知識,接下來可能要上手去使用了,在之前先把之前的知識鞏固一下,分享一下,請多多指正@_@
新聞熱點
疑難解答