NEO4J 獨特的NoSQL graph資料庫
NoSQL資料庫一般有四個型別:
1. key-value儲存,基於amazon的Dynamo Papaer 主要是k-v集合,主要產品有dynomite, voldemort,Tokyo
2.BigTable clones: 基於google BigTable Paper,大表 列組合,主要產品有Hbase, Hypertable
3.文字資料庫:學習lotus notes,主要產品有CouchDB和MongoDB
4.圖資料庫:受圖論影響,主要產品有NEO4J。
這四種NoSQL資料庫複雜程度依次提高。
Neo4j屬於NoSQL資料庫中很獨特的一種,它由節點nodes 節點關係和節點與關係中的屬性property組成。
所有節點關係都是一種型別,比如如果你是應用社交場景,那麼關係就是KNOWS,如果一種KNOWS型別關係連線兩個人,可能表示這兩個人互相認識。這種圖資料庫適合社會網路應用(LinkedIn Facebook) 檔案系統 角色關係等。
Neo4j中的節點圖是常駐記憶體中的,自身實現自動持久到硬碟上。使用Neo4j你直接是和記憶體打交道。
Neo4j中的節點 關係和屬性的表達非常適合OO,物件世界中有實體 關聯和屬性正好對應Neo4J的節點 關係和屬性,Qi4j(http://www.qi4j.org)就是使用Neo4j實現DDD中實體持久的一個領域設計驅動框架。
這樣我們需要持久化一個領域模型再也不需要Hibernate JPA那些試圖在物件和關聯式資料庫之間搞平衡進而帶來複雜性的ORM框架了。以下是使用Neo4J的一個領域模型實現自動持久的程式碼:
當客戶端對getName和setName進行操作時,實際是從記憶體圖節點中獲得name的資料,這種完全基於記憶體計算模式將持久化交給框架架構自動完成,是NoSQL模式的一個共同特點,同時支援分散式記憶體資料複製是NoSQL資料庫的另外一個特點。
最後羅嗦一下權當廣告:JdonFramework 6.2推出Domain Events以後,也可以使用Neo4j或傳統的關聯式資料庫實現如上面程式碼所示對領域模型實現即時即用的持久化,如果使用關聯式資料庫持久,就要使用Ehcache+terracotta作為分散式快取;如果直接使用Neo4j,就可以完全扔掉EhCache和關聯式資料庫了。條條大路通羅馬。
快取和key-value記憶體區別就是:當記憶體不足以容納全部業務資料量時,稱為快取,反之就是key-value Store或記憶體資料庫,記憶體資料庫和key-value儲存區別就是後者高可伸縮性,由於沒有關聯式資料庫的複雜關係,致使多臺伺服器之間不用頻繁複制太多資料,大大提高效能。
1. key-value儲存,基於amazon的Dynamo Papaer 主要是k-v集合,主要產品有dynomite, voldemort,Tokyo
2.BigTable clones: 基於google BigTable Paper,大表 列組合,主要產品有Hbase, Hypertable
3.文字資料庫:學習lotus notes,主要產品有CouchDB和MongoDB
4.圖資料庫:受圖論影響,主要產品有NEO4J。
這四種NoSQL資料庫複雜程度依次提高。
Neo4j屬於NoSQL資料庫中很獨特的一種,它由節點nodes 節點關係和節點與關係中的屬性property組成。
所有節點關係都是一種型別,比如如果你是應用社交場景,那麼關係就是KNOWS,如果一種KNOWS型別關係連線兩個人,可能表示這兩個人互相認識。這種圖資料庫適合社會網路應用(LinkedIn Facebook) 檔案系統 角色關係等。
Neo4j中的節點圖是常駐記憶體中的,自身實現自動持久到硬碟上。使用Neo4j你直接是和記憶體打交道。
Neo4j中的節點 關係和屬性的表達非常適合OO,物件世界中有實體 關聯和屬性正好對應Neo4J的節點 關係和屬性,Qi4j(http://www.qi4j.org)就是使用Neo4j實現DDD中實體持久的一個領域設計驅動框架。
這樣我們需要持久化一個領域模型再也不需要Hibernate JPA那些試圖在物件和關聯式資料庫之間搞平衡進而帶來複雜性的ORM框架了。以下是使用Neo4J的一個領域模型實現自動持久的程式碼:
class PersonImp implements Person{ private final Node node; //neo4j public String getName(){ return node.getProperty("name"); } public vod setName(String name){ this.node.setProperty("name", name); } } <p class="indent"> |
當客戶端對getName和setName進行操作時,實際是從記憶體圖節點中獲得name的資料,這種完全基於記憶體計算模式將持久化交給框架架構自動完成,是NoSQL模式的一個共同特點,同時支援分散式記憶體資料複製是NoSQL資料庫的另外一個特點。
最後羅嗦一下權當廣告:JdonFramework 6.2推出Domain Events以後,也可以使用Neo4j或傳統的關聯式資料庫實現如上面程式碼所示對領域模型實現即時即用的持久化,如果使用關聯式資料庫持久,就要使用Ehcache+terracotta作為分散式快取;如果直接使用Neo4j,就可以完全扔掉EhCache和關聯式資料庫了。條條大路通羅馬。
快取和key-value記憶體區別就是:當記憶體不足以容納全部業務資料量時,稱為快取,反之就是key-value Store或記憶體資料庫,記憶體資料庫和key-value儲存區別就是後者高可伸縮性,由於沒有關聯式資料庫的複雜關係,致使多臺伺服器之間不用頻繁複制太多資料,大大提高效能。
[該貼被banq於2009-12-01 17:52修改過]
相關文章
- 圖資料庫對比:Neo4j vs Nebula Graph vs HugeGraph資料庫
- NoSQL資料庫概念與NoSQL資料庫家族SQL資料庫
- NoSql資料庫SQL資料庫
- Neo4j資料庫資料庫
- NoSQL資料庫興起SQL資料庫
- 四類NoSQL資料庫SQL資料庫
- NoSQL資料庫盤點SQL資料庫
- NoSQL資料庫筆談SQL資料庫
- NoSQL 新貴之崛起的 Neo4jSQL
- 什麼是NoSQL資料庫?SQL資料庫
- NoSQL資料庫效能測試SQL資料庫
- NoSQL 資料庫的主主備份SQL資料庫
- NoSQL資料庫的基礎知識SQL資料庫
- 圖資料庫Neo4j入門資料庫
- Neo4j 圖資料庫基礎資料庫
- Neo4j - 圖資料庫基礎資料庫
- NoSQL資料庫探討 -- 非關係型資料庫SQL資料庫
- 圖資料庫 Nebula Graph 的安裝部署資料庫
- 圖資料庫 Nebula Graph TTL 特性資料庫
- 如何選擇合適的NoSQL資料庫SQL資料庫
- Nosql 資料庫 MemCache、Redis、MongoDB 的區別SQL資料庫RedisMongoDB
- SnappyDB—Android上的NoSQL資料庫APPAndroidSQL資料庫
- 排名前十的SQL和NoSQL資料庫SQL資料庫
- 四大類NOSQL資料庫SQL資料庫
- redis(1)NoSQL資料庫簡介RedisSQL資料庫
- 轉享:NoSQL資料庫筆談SQL資料庫
- 主流NoSQL資料庫Redis專題SQL資料庫Redis
- 從 Neo4j 匯入 Nebula Graph 實踐見 SPark 資料匯入原理Spark
- Neo4j:圖資料庫的革命性力量資料庫
- 從關聯式資料庫遷移到NoSQL雲資料庫資料庫SQL
- 【轉載】關聯式資料庫還是NoSQL資料庫資料庫SQL
- 圖形資料庫Neo4J簡介資料庫
- At a Conference? Need a Dataset? Neo4j at NOSQL NOWSQL
- 瞭解如何在 Neo4j 的 NoSQL 資料儲存中持久化物件和關係。SQL持久化物件
- 關係型資料庫和NOSQL資料庫的優缺點介紹資料庫SQL
- 關係型資料庫與NoSQL資料庫的優勢與劣勢資料庫SQL
- AWS Around---NoSql資料庫的不同型別SQL資料庫型別
- 28個MongoDB NoSQL資料庫的面試問答MongoDBSQL資料庫面試