Java开发者调查:最受欢迎的图形数据库在图形理论当中,一幅简单的图形是由一系列节点与边线所构成。事实上图形类数据库往往会赋予节点与连线更多类别与属性,以使其更具可描述性及实际应用功能。至少用户希望图形类数据库能够支持快速遍历——这也是大家不会简单地使用像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使用以下索引机制:一个超级参考节点通过一条特殊类别的边线“REFERENCE”与所有节点相连。这实际上允许我们创建多个索引,借以通过不同的边线类别对其加以区分。索引结构如图二所示。
▲图二
Neo4J还提供了一些特殊功能,例如列出特定节点的相邻诸节点或是两节点间长度最短的诸类路径等。请注意,要使用上述各类“遍历”功能,Neo4J要求大家指定路径中经过的边线类别,其实这一点并不麻烦。
其实大家不必将Neo4J作为软件加以安装。我们完全可以简单地导入JAR文件来建立一套嵌入式图形数据库,该操作将在硬盘上建立对应的目录。具体信息在Neo4J的说明文档中已经相当完备,而且其免费版本也没有设置节点支持数量的上限。
缺点:
·尽管我们可以手动为节点类别通过“type”键添加注释,但相比之下为节点类别在API中提供本地支持无疑更好,因为这将使图形模型更具普遍意义。另外一旦某个节点具备多种不同类别,麻烦也将随之而来。
·由用户手动为新边线设置索引机制似乎有点奇怪并且很不方便。最好是采用如今关系类数据库的普遍做法:用户只需表明要“为一组节点创建索引”,工作即可完成。
2. Infinite Graph (Objectivity Inc.出品)
InfiniteGraph 是一款由Objectivity公司推出的图形类数据库,该公司还推出过一款同名的对象类数据库。免费许可版本只能支持最高100万节点及边线总数。InfiniteGraph 需要作为服务项目加以安装,这与以MySQL为代表的传统数据库颇为相似。InfiniteGraph 借鉴了Objectivity/DB中的面向对象概念,因此其中的每一个节点及边线都算作一个对象。尤其是:
·所有节点类都将扩展BaseVertex基本类;
hbase属于什么数据库·所有边线类都将扩展BaseEdge基本类。
在 wiki.infinitegraph/w/index.php?title=Tutorial:_Hello_Graph!中所显示的展示页面中,假设人是一个节点类、而会议算作为边线类。以下是将一条边线加入到两个节点之间的代码:
Person john = new Person("John", "Hello ");
helloGraphDB.addVertex(john);
Person dana = new Person("Dana", "Database!");
helloGraphDB.addVertex(dana);
Meeting meeting1 = new Meeting("NY", "Graph");
▲图三
InfiniteGraph还提供了一套可视化工具用以查看数据。由上述代码所生成的边线将如图三所示呈现出可视化效果。相比Neo4J在图一中所展现的图形模型,InfiniteGraph能够支持同时具备多种不同类别/类的节点。请注意,Neo4J中的键-值对能够对应InfiniteGraph 类中的成员变量。
缺点:
·作为服务项目进行安装本身没什么问题,但配置过程完全可以更简单些。
·由于节点与边线都能成为用户的定义对象,因此在灵活性得到保证的情况下,作者怀疑当其处理庞大的图形结构时,性能方面将受到严重影响。请大家记住,NoSQL数据库一直以来所赢得的广泛关注都建立在其始终傲人的性能表现上。
3. DEX (Sparsity Technologies出品)
DEX一直被形容为一款具备高性能及优秀可扩展性的图形类数据库,这对于NoSQL应用程序来说无疑拥有相当强的吸引力。其个人评估版本最多可支持100万个节点。目前最新的版本是4.2,同时支持Java及.Net编程。请注意,旧的4.1版本只支持Java,且无法与新版本相兼容。直到文章截止之日(2011年11月24日),4.2版本的说明文档仍不完备,而且很难在网上到新版本的使用指导。
▲图四
图四展示的是DEX的架构,这也解释了为什么DEX能够达成如此优异的性能表现。本地C++ DEX核心正是关键所在。在此活动页面中,DEX项目团队演示了以其为基础的数款令人兴奋的应用程序:
·书目探索: DEX使用实例,存储着DBLP(即数字书目索引与图书馆项目)中的所有数据(点此进入演示);
·在DEX中载入Twitter: 其中包括45亿个图形;
·在DEX 及Query中载入: 效果明显好于Neo4J。
DEX在安装方面同样简便,大家只需要一个JAR文件并加以运行即可。与Neo4J不同,DEX的当前数据库只是一个单独的文件。DEX Java API同样易于使用,而图形类则几乎能够提供任何一项大家需要的操作。不过DEX也并非完善无缺,相信摒除下列缺点的DEX会在发展的道路上走得更远:
·最好将个人版的节点上限数量提升到10亿;
·尽快提供完备的说明文档与更好的应用实例;
·在短期之内将旧版本中的图形算法移植到新版本中。
点击此处查看另一篇文章,其中详细阐述了在DEX中部署图形的流程。
4. InfoGrid (Netmesh Inc.出品)
InfoGrid一直标榜自己是一款“网页图形数据库”,也就是说它的某些功能主要面向网页应用程序。图五展示了InfoGrid的整体框架,而图形数据库在其中所扮演的似乎并不是主要组成部分。InfoGrid在OpenID项目中也拥有几款应用程序,该项目同样由Netmesh 公司所支持。作者怀疑InfoGrid这套东西其实只在Netmesh公司内部使用,因为它存在着以下硬伤:
·此处公布的最新Java API并不完善,且在某些地方有混淆情况;
·此处公布的使用教程语意含糊且不够正式。
▲图五
点击如下链接 /wiki/Examples/FirstStep可以查看首个应用实例。虽然总体来说在阅读方面没什么难度,但像TAGLIBRARY, TAG, TAG_LABEL以及TAGLIBRARY_COLLECTS_TAG这类内容的大量出现却让人相当困惑。这些内容似乎嵌入在模块当中,为什么会这样?看起来该应用实例其实是用在Netmesh公司的某个内部项目中的,旨在为某些特定应用程序提供服务。
5. HyperGraphDB (Kobrix Inc.出品)
HyperGraphDB是一套开源数据存储机制,并依托于BerkeleyDB数据库存在。HyperGraphDB的图形模型被称为直接式超图形。从数学角度来讲,超图形允许其一条边线指向两个以上的节点。HyperGraphDB在此基础上更进一步,允许一条边线指向其它边线,如此一来HyperGraphDB在概括性方面就大大超过了其它图形类数据库。图六显示的就是四条边线在超图形实例中的情况,各边线以不同颜加以区分。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论