我想使用加载到Neo4j中的ENRON GraphML dataset作为我的Grails 2.0应用程序的数据库。数据的用例是只读的。我在加载数据集和在独立应用程序中创建数据库时没有遇到任何问题,现在我想使用Grails插件来管理对数据库的访问。
查看映射域类的Neo4J plugin documentation,我发现它需要每种类型顶点的子引用节点。我的数据没有。我可以看到几种前进的方式,并且不确定要追求的目标:
转储插件,创建服务,并自行管理读取数据库。优点:我可以轻松实现这一点。缺点:潜在的性能问题,错误。
编写一个程序,创建插件所需的缺失顶点和边缘,然后将数据库加载到插件中。优点:插件将管理访问权限。缺点:可能需要进行一些迭代才能确定需要添加哪些内容才能使其与插件创建的数据库保持一致。
通过插件创建一个空数据库,并通过读取其他数据库中的数据执行一系列插入。优点:插件将管理访问权限。缺点:可能需要很长时间来引导数据库;需要编写代码来遍历,序列化数据库;等
什么是好的方式?我在俯瞰什么?
答案 0 :(得分:1)
作为Grails Neo4j插件的作者,我或许可以在这里给出一个合格的答案。当前在插件中使用的子引用结构并不总是最好的方法。我有一些计划通过以可配置的方式索引来替换它,但现在没有ETA。 由于您可能需要更短期的解决方案,我建议在只读数据库的情况下在1)和2)之间进行选择。使用域类的一个主要优点是使用脚手架。正如你所读到的,这个论点在这里不算恕我直言。
1)还有另一个好处:如果你使用例如cypher查询图表即使使用REST样式数据库,性能也会非常好。一般来说,如果性能很重要,你应该使用cypher来支持Grails标准查询/动态查找器。
2)如果你采用这种方法,我可以提供一些支持。基本上,您需要创建域类并为每个域类创建一个子引用节点,并将所有实例连接到此类。优势在于:您可以使用例如动态查找器或标准条件查询。使用一个或两个cypher语句可以轻松地创建子引用节点和与实例节点的连接。