图数据库 Neo4j 笔记

图数据库

图数据库是一种非关系型数据库,它应用图形理论存储实体之间的关系信息。最常见的一个例子,就是社会网络中人与人之间的关系。

  • 当前有流行图形数据库:Neo4j、FlockDB、AllegroGraph、GraphDB、InfiniteGraph、OrientDB、InfoGrid和HypergraphDB等
  • 另有自称比MongoDB和Neo4j性能更佳的多模型数据库ArangoDB,见nosql-tests
  • 关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。

Neo4j

Neo4j是一个用Java实现、完全兼容ACID的图形数据库。数据以一种针对图形网络进行过优化的格式保存在磁盘上。Neo4j的内核是一种极快的图形引擎,具有数据库产品期望的所有特性,如恢复、两阶段提交、符合XA等。自2003年起,Neo4j就已经被作为24/7的产品使用。 Neo4j是目前主流的一个图数据库,相比传统的关系型数据库,它可以快速的进行基于人际社交网络类的查询查询和检索;它同时提供了cypher语言来方便进行图数据库的操作和查询,该查询语言类似SQL语言。 Neo4j的数据并非保存在表或集合中,而是保存为节点以及节点之间的关系。在Neo4j中,*节点以及关系都能够包含保存值的属性*,此外:

  • 可以为节点设置零或多个标签(例如Author或Book)
  • 每个关系都对应一种类型(例如WROTE或FRIEND_OF)
  • 关系总是从一个节点指向另一个节点(但可以在不考虑指向性的情况下进行查询)

为什么选择 Neo4j?

  • 自带一套易于学习的查询语言(Cypher
  • 不使用schema,因此可以满足你的任何形式的需求
  • 与关系型数据库相比,对于高度关联的数据(图形数据)的查询快速要快上许多
  • 实体与关系结构非常自然地切合人类的直观感受
  • 支持兼容ACID的事务操作
  • 提供了一个高可用性模型,以支持大规模数据量的查询,支持备份、数据局部性以及冗余
  • 提供了一个可视化的查询控制台

什么时候不应使用Neo4j?

作为一个图形NoSQL数据库,Neo4j提供了大量的功能,但没有什么解决方案是完美的。在以下这些用例中,Neo4j就不是非常适合的选择:

  • 记录大量基于事件的数据(例如日志条目或传感器数据)
  • 对大规模分布式数据进行处理,类似于Hadoop
  • 二进制数据存储
  • 适合于保存在关系型数据库中的结构化数据

Neo4j图模型

Neo4J中的图形模型要点:NodesRelationships可以被赋予Properties(key-value); Nodes可按label分组;Relationships可赋予direction和type并最终构成数据形态;Neo4j可存储10亿级别的数据量 Neo4J使用以下索引机制:一个超级参考节点通过一条特殊类别的边线“REFERENCE”与所有节点相连。这实际上允许创建多个索引,借以通过不同的边线类别对其加以区分。Neo4J还提供了一些特殊功能,如列出特定节点的相邻诸节点或是两节点间长度最短的诸类路径等。注意要使用上述各类“遍历”功能,Neo4J要求指定路径中经过的边线类别。

参考