NEO4J 独特的NoSQL graph数据库

09-12-01 banq
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修改过]

6
dotlife
2012-09-24 22:32
与其他NoSQL比,性能如何呢?

wee
2012-09-24 22:55
NEO4J部分收费的,本来打算用它做social graph

dotlife
2012-09-27 00:16
很想知道Neo4j和其他NoSQL比起来,各自擅长的领域以及性能对比。

banq
2012-09-27 08:31
2012-09-27 00:16 "@dotlife"的内容
Neo4j和其他NoSQL比起来,各自擅长的领域以及性能对比 ...


Neo4j是图库,适合直接保存带有关联关系的对象图,但是性能不太好。这是我看到有关资料的印象。

猜你喜欢