Neo4J圖庫的基礎介紹(一)

•Neo4j是一個高性能的,NOSQL圖形數據庫,它徹底支持ACID(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))數據庫事務屬性,採用JAVA語音編寫,因爲其良好的圖數據模型設計,Neo4j的速度很是快。對於鏈接的數據操做,Neo4j的速度要比傳統的關係型數據庫快1000倍。部署一個neo4j服務器即可以承載上億級的節點和關係。當單節點沒法承載咱們的數據需求時,咱們能夠進行分佈式集羣部署.
 
•一個圖由無數的節點和關係組成
•「一張圖 – 數據記錄在 → 節點 → 包括的 → 屬性裏面」
•最簡單的圖是單節點的,一個記錄,記錄了一些屬性。一個節點能夠從單屬性開始,成長爲成千上億,雖然會有一點點麻煩。從某種意義上講,將數據用關係鏈接起來分佈到不一樣節點上纔是有意義的。
「節點 — 被組織 → 關係 — 能夠有 → 屬性」
關係能夠將節點組織成任意的結構,容許一張圖被組織成一個列表,一棵樹,一張地圖,或者一個複雜的實體 – 這個實體自己也是由複雜的,關係高度關聯的結構組成。
•「一個索引 — 映射到 → 屬性 — 屬於 → 節點或者關係」
•常常,你想經過某一給定的屬性值找到節點或者關係。比起經過遍歷咱們的圖來書,用索引將會更加高效。好比「找到用戶名是tony的用戶」。
 
 
 
節點
•構成一張圖的基本元素是節點和關係。在Neo4j中,節點和關係均可以包含屬性。
•節點常常被用於表示一些_實體_,但依賴關係也同樣能夠表示實體。
一個最簡單的節點,他只有一個屬性,屬性名是 name, 屬性值是 Marko
 
關係
•節點之間的關係是圖數據庫很重要的一部分。經過關係能夠找到不少關聯的數據,好比節點集合,關係集合以及他們的屬性集合。
一個關係鏈接兩個節點,必須有一個開始節點和結束節點。
•由於關係老是直接相連的,因此對於一個節點來講,與他關聯的關係看起來有輸入/輸出兩個方向,這個特性對於咱們遍歷圖很是有幫助:
 
 
•爲了未來加強遍歷圖中全部的關係,咱們須要爲關係設置類型。注意 關鍵字 type 在這可能會被誤解,你其實能夠把他簡單的理解爲一個標籤而已。
•下面的例子是一個有兩種關係的最簡單的社會化網絡圖。
 
 
 
•節點和關係均可以設置本身的屬性。
•屬性是由Key-Value鍵值對組成,鍵名是字符串。屬性值是要麼是原始值,要麼是原始值類型的一個數組。好比+String+,+int+和i+int[]+都是合法的。
 
 
•路徑:路徑由至少一個節點,經過各類關係鏈接組成,常常是做爲一個查詢或者遍歷的結果。
 
 
 
•最短的路徑是0長度的像下面這樣:
 
 
•長度爲1的路徑以下:
 
 
社交關係圖
 
 
•遍歷(Traversal):遍歷一張圖就是按照必定的規則,跟隨他們的關係,訪問關聯的的節點集合。最多的狀況是隻有一部分子圖被訪問到,由於你知道你對那一部分節點或者關係感興趣。
•Neo4j提供了遍歷的API,可讓你指定遍歷規則。最簡單的設置就是設置遍歷是寬度優先仍是深度優先。
•Traversal.preorderDepthFirst(): 深度優先,在訪問的子節點以前訪問每個節點。
•Traversal.postorderDepthFirst(): 深度優先,在訪問的子節點以後訪問每個節點。
•Traversal.preorderBreadthFirst(): 寬度優先,在訪問的子節點以前訪問每個節點。
•Traversal.postorderBreadthFirst(): 寬度優先,在訪問的子節點以後訪問每個節點。
•增長一個關係類型到遍歷的關係類型列表中。 默認狀況下,這個列表是空的,意味着默認會返回 全部類型 的關係,而不考慮類型。 若是有關係被加入到這個列表中,那就意味着 只有 列表中的關係纔會被遍歷。 有兩個方法,一個是包括方向,另一個是排除方向,這個方法中遍歷關係是雙向的。
 
 
 
經過引入一個正確的Java庫就能夠將Neo4j放入項目中,在選擇了適合你的平臺的版本後,經過引入jar包到你的應用中來完成嵌入Neo4j,在嵌入式的模式下,Neo4j能夠和應用程序運行於同一個進程,嵌入式的優勢:
一、低延遲,直接與數據庫對話,沒有網絡開銷。
二、任選API,能夠全範圍的訪問建立和查詢數據的API,包括Neo4j的核心API,遍歷框架和Cypher查詢語音
三、嵌入式模式提供了對命名索引的建立和管理的徹底控制。
嵌入式缺點:
一、僅能應用於JVM,Neo4j是基於JVM的數據庫,所以它的不少API僅能經過基於JVM的語音訪問。
二、GC的行爲,主機的應用程序垃圾回收器的行爲會對Neo4j產生影響,而且當嵌入式實例運行於HA集羣時,長期的GC暫停可能會使集羣協議觸發主節點重選
三、應用程序負責控制數據庫的生命週期,包括啓動和關閉。嵌入式版本的Neo4j和服務器版本的Neo4j同樣,也能夠作成集羣。也能夠將嵌入式和服務器版本的Neo4j作混合集羣。
 
Neo4j能夠做爲一個獨立服務器訪問,能夠直接經過一個REST接口或者一個基於指定語言的驅動。
一、REST API:服務器提供了REST API接口,容許客戶端經過http請求發送JSON格式的請求,響應包括JSON格式的消息響應。
二、平臺獨立性:因爲訪問是經過HTTP發送的JSON格式的文檔,所以Neo4j服務器能夠被運行於任何平臺的客戶端訪問。
三、Neo4J以服務器模式運行時,能夠獨立於應用服務器。
四、與應用程序的GC行爲隔離,服務器模式中,任何應用程序的不良GC行爲都不會影響Neo4j。
五、網絡開銷:在接收到第一個客戶端請求以後,TCP連接會保持開啓狀態,知道客戶端關閉。
六、每一個請求的事務:每一個客戶端的請求都在一個單獨的事務上下文中被執行。
七、開發者能夠本身擴展REST API,擴展采起JAX-RS註解類(annotated class)的形式。
 
 
相關文章
相關標籤/搜索