NEO4J 獨特的NoSQL graph資料庫

banq發表於2009-12-01
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的一個領域模型實現自動持久的程式碼:

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修改過]

相關文章