技术开发 频道

图形数据库之争:Neo4J与Infinite Graph

        【IT168 评论】在图形理论当中,一幅简单的图形是由一系列节点与边线所构成。事实上图形类数据库往往会赋予节点与连线更多类别与属性,以使其更具可描述性及实际应用功能。至少用户希望图形类数据库能够支持快速遍历——这也是大家不会简单地使用像HBase或者Cassandra这样的表格类数据库存储所有边线的原因(联合运算往往会提高使用成本)。

  图形类数据库属于NoSQL数据库四大类型之一,图形存储类产品中也以下列七种较为流行及常用: Neo4J, Infinite Graph, DEX, InfoGrid, HyperGraphDB, Trinity 以及AllegroGraph。本文以Java程序员的视角出发,与我们共同探讨上述产品的各类细节。

  1. Neo4J (Neo Technology出品)

  Neo4J可能是当下人气最高的图形数据库。从名称我们就能看出Neo4J在设计上主要考虑到Java应用程序的实际需求,但它同时也支持Python。Neo4J属于开源项目,共有GPLv3社区版、高级版、企业版三种版本;后两者都以AGPLv3商业许可为基础。

  Neo4J中的图形模型如图一所示。简单来说:

  ·节点与边线可以被赋予属性(键-值对);

  ·只有边线能够与类别相关联,例如“KNOWS”;

  ·边线可以指定为有指向或无指向。

图形数据库之争:Neo4J与Infinite Graph
▲图一

  由于节点名称的存在,如果大家想在图中找到对应节点,那么必须依靠索引。Neo4J使用以下索引机制:一个超级参考节点通过一条特殊类别的边线“REFERENCE”与所有节点相连。这实际上允许我们创建多个索引,借以通过不同的边线类别对其加以区分。索引结构如图二所示。

图形数据库之争:Neo4J与Infinite Graph
▲图二

  Neo4J还提供了一些特殊功能,例如列出特定节点的相邻诸节点或是两节点间长度最短的诸类路径等。请注意,要使用上述各类“遍历”功能,Neo4J要求大家指定路径中经过的边线类别,其实这一点并不麻烦。

  其实大家不必将Neo4J作为软件加以安装。我们完全可以简单地导入JAR文件来建立一套嵌入式图形数据库,该操作将在硬盘上建立对应的目录。具体信息在Neo4J的说明文档中已经相当完备,而且其免费版本也没有设置节点支持数量的上限。

  缺点:

  ·尽管我们可以手动为节点类别通过“type”键添加注释,但相比之下为节点类别在API中提供本地支持无疑更好,因为这将使图形模型更具普遍意义。另外一旦某个节点具备多种不同类别,麻烦也将随之而来。

  ·由用户手动为新边线设置索引机制似乎有点奇怪并且很不方便。最好是采用如今关系类数据库的普遍做法:用户只需表明要“为一组节点创建索引”,工作即可完成。

1
相关文章