現實中不少數據都是用圖來表達的,好比社交網絡中人與人的關係、地圖數據、或是基因信息等等。RDBMS並不適合表達這類數據,並且因爲海量數據的存在,讓其顯得捉襟見肘。NoSQL數據庫的興起,很好地解決了海量數據的存放問題,圖數據庫也是NoSQL的一個分支,相比於NoSQL中的其餘分支,它很適合用來原生表達圖結構的數據。html
下面一張圖說明,相比於其餘NoSQL,圖數據庫存放的數據規模有所降低,可是更可以表達複雜的數據。node
一般來講,一個圖數據庫存儲的結構就如同數據結構中的圖,由頂點和邊組成。程序員
Neo4j是圖數據庫中一個主要表明,其開源,且用Java實現。通過幾年的發展,已經能夠用於生產環境。其有兩種運行方式,一種是服務的方式,對外提供REST接口;另一種是嵌入式模式,數據以文件的形式存放在本地,能夠直接對本地文件進行操做。sql
Neo4j是一個高性能的,NOSQL圖形數據庫,它將結構化數據存儲在網絡上而不是表中。Neo4j也能夠被看做是一個高性能的圖引擎,該引擎具備成熟數據庫的全部特性。程序員工做在一個面向對象的、靈活的網絡結構下而不是嚴格、靜態的表中——可是他們能夠享受到具有徹底的事務特性、企業級的數據庫的全部好處。數據庫
Neo4j因其嵌入式、高性能、輕量級等優點,愈來愈受到關注。網絡
在一個圖中包含兩種基本的數據類型:Nodes(節點) 和 Relationships(關係)。Nodes 和 Relationships 包含key/value形式的屬性。Nodes經過Relationships所定義的關係相連起來,造成關係型網絡結構。數據結構
從這幾個方面來講,Neo4j是一個合適的選擇。Neo4j……nosql
做爲一個圖形NoSQL數據庫,Neo4j提供了大量的功能,但沒有什麼解決方案是完美的。在如下這些用例中,Neo4j就不是很是適合的選擇:分佈式
The node records contain only a pointer to their first property and their first relationship (in what is oftentermed the _relationship chain). From here, we can follow the (doubly) linked-list of relationships until we find the one we’re interested in, the LIKES relationship from Node 1 to Node 2 in this case. Once we’ve found the relationship record of interest, we can simply read its properties if there are any via the same singly-linked list structure as node properties, or we can examine the node records that it relates via its start node and end node IDs. These IDs, multiplied by the node record size, of course give the immediate offset of both nodes in the node store file.oop
上面的英文摘自<Graph Databases>
(做者:IanRobinson) 一書,描述了 neo4j 的存儲模型。Node和Relationship 的 Property 是用一個 Key-Value 的雙向列表來保存的; Node 的 Relatsionship 是用一個雙向列表來保存的,經過關係,能夠方便的找到關係的 from-to Node. Node 節點保存第1個屬性和第1個關係ID。
經過上述存儲模型,從一個Node-A開始,能夠方便的遍歷以該Node-A爲起點的圖。下面給個示例,來幫助理解上面的存儲模型,存儲文件的具體格式在第2章詳細描述。
在這個例子中,A~E表示Node 的編號,R1~R7 表示 Relationship
編號,P1~P10 表示Property
的編號。
Node
保存了第1個Property
和 第1個Relationship
:http://www.cnblogs.com/ljhero/archive/2012/05/13/2498039.html
底層原理:http://sunxiang0918.cn/2015/06/27/neo4j-%E5%BA%95%E5%B1%82%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84%E5%88%86%E6%9E%90/