1

我想使用加载到 Neo4j 中的ENRON GraphML 数据集作为我的 Grails 2.0 应用程序的数据库。数据的用例是只读的。我在独立应用程序中加载数据集和创建数据库没有问题,现在想使用 Grails 插件来管理对数据库的访问。

查看有关映射域类的Neo4J 插件文档,我发现它需要为每种类型的顶点提供子引用节点。我的数据没有。我可以看到几种前进的方式,但不确定要追求哪种方式:

  1. 转储插件,创建服务,并自己管理读取数据库。优点:我可以轻松实现这一点。缺点:潜在的性能问题、错误。

  2. 编写一个程序来创建插件所需的缺失顶点和边,然后将数据库加载到插件中。优点:插件将管理访问。缺点:可能需要进行几次迭代才能准确确定需要添加哪些内容以使其与插件创建的数据库保持一致。

  3. 通过插件创建一个空数据库,并通过从不同的数据库中读取数据来执行一系列插入操作。优点:插件将管理访问。缺点:引导数据库可能需要很长时间;需要编写代码来遍历、序列化数据库;等等

有什么好方法?我在看什么?

4

1 回答 1

1

作为 Grails Neo4j 插件的作者,我或许可以在这里给出一个合格的答案。插件中当前使用的子引用结构并不总是最好的方法。我有一些计划通过以可配置的方式索引来替换它,但现在没有 ETA。由于您可能需要更短期的解决方案,我建议在只读数据库的情况下在 1) 和 2) 之间进行选择。使用域类的主要优点之一是使用脚手架。由于您是只读的,因此恕我直言,此论点在这里不算数。

1) 还有一个很好的优势:如果您使用例如 cypher 来查询图形,即使使用 REST 风格的数据库,性能也会非常好。一般来说,如果性能很重要,您应该使用 cypher 来支持 Grails 标准查询/动态查找器。

2)如果您采用这种方法,我可以提供一些支持。基本上,您需要创建域类并为每个域类创建一个子引用节点,并将所有实例连接到该节点。这里的优势:您可以使用例如动态查找器或标准条件查询。创建子引用节点和与实例节点的连接可以通过一两个密码语句轻松完成。

于 2012-10-31T20:38:46.410 回答