我很少有人会从Neo4J Embedded迁移到Neo4J服务器,如果您能对这些内容做出澄清,我们将不胜感激。
背景
我们一直在嵌入模式下使用Neo4J(1.8.x)用于我们的一个应用程序(事件管理平台),SDN(2.x)与Neo4J 1.8.x兼容,从而利用SDN提供的基础设施(NodeEntity, RelationshipEntity等。)
CUD操作通过Neo4JTemplate& amp;通过参数化的Cypher查询完成读取操作。
几乎每个域对象都有自己的索引(通过@Indexed指定的索引名称),我们还使用精确,全文和空间索引的组合。
我们的遍历并不复杂(最多3-4级)。我们总共有60K +节点,120K +关系,& 400K +属性
我们现在想从嵌入式模式转向服务器模式,因此服务器模式支持REST api。显然,切换到服务器模式很容易,即切换到SpringRestGraphDatabase,事情开始正常工作(问题除外) 我们不能发布超过20KB(https://github.com/neo4j/neo4j/issues/1232)的大文本。
我们手头的问题是性能。我已经讨论了几个关于REST上的性能问题的论坛/主题,并提到了几个关于使调用课程粒度或使用rest-batch api或编写服务器扩展的点。
查询
我正在探索支持批处理的Neo4J-Java-REST绑定(即BatchCallback)。走这条路,我现在可以将我的所有操作组合在一起,但是我必须处理Node对象而不是SDN映射的域对象。
这是对的吗?
如果是,是否有任何机制可以使用SDN处理rest-batch-api中的域对象而不是核心实体(Node等)
我们的大多数域对象创建都涉及以下步骤:
使用指定参数
在实体和所有者之间建立关系(恰好是用户)
一些用例在内部创建其他实体并自动建立主要与这些之间的关系
由于几乎每个实体都有自己的索引,因此创建的实体会添加到相应的索引中(通过@Indexed)
所有这些步骤都被视为原子操作
使用批处理api(java-REST),它们被视为原子操作吗?我的印象是,它们是作为批处理发送的,但不一定是作为原子操作执行的。
我的理解是否正确?如果是,我们如何将它们视为原子? 这是否保证我们开发服务器扩展?
此外,是否有从SDN / Embedded迁移到SDN / REST的指南/最佳实践?
正如我们以前使用的1.8,我们使用了手动索引,现在在2.x中我们有了我们想要采用的标签。在那儿 任何可用于将手动索引数据移动到标签的指南/工具?
是否有任何关于neo4j发布路线图的网页?
谢谢&的问候,
钱德拉
答案 0 :(得分:2)
这是我们从服务器版本迁移到嵌入式版本的确切原因。性能差异确实令人惊讶。自从尝试使用最新版本的neo4j以来,我还没有,但我真的希望这已经得到了解决,因为它是一个如此优秀且充满希望的图形数据库。抱歉,我无法为您提供您想要听到的解决方案,但如果您确实得到了解决方案,那么我非常希望能够听到它。干杯
答案 1 :(得分:1)
关于SDN / REST的使用,我发布了一个问题here
简而言之,SDN / REST尚未准备就绪。