【发布时间】:2014-03-17 07:09:45
【问题描述】:
关于从 Neo4J Embedded 迁移到 Neo4J Server 的问题,我几乎没有任何疑问,如果您能就这些问题提供说明,我将不胜感激。
背景
我们一直将 Neo4J (1.8.x) 以嵌入式模式用于我们的一个应用程序(事件管理平台),SDN (2.x) 与 Neo4J 1.8.x 兼容,从而利用 SDN (NodeEntity,关系实体等)。
CUD 操作通过 Neo4JTemplate 进行路由,读取 100% 通过参数化 Cypher 查询完成。
几乎每个域对象都有自己的索引(通过@Indexed 指定索引名称),我们还使用精确索引、全文索引和空间索引的组合。
我们的遍历并不复杂(最多 3-4 层深度)。我们总共有 60K+ 节点、120K+ 关系和 400K+ 属性
我们现在想从嵌入式模式转移到服务器模式,从而使用服务器模式支持的 REST api。显然,切换到服务器模式很容易,即切换到 SpringRestGraphDatabase 并且事情开始正常工作(除了问题 我们不能发布超过 20KB 的大文本 (https://github.com/neo4j/neo4j/issues/1232))。
我们手头的问题是性能。我浏览了几个讨论 REST 性能问题的论坛/主题,其中提到了一些关于使调用按课程粒度或使用 rest-batch api 或编写服务器扩展的几点。
查询
-
我正在探索支持批处理(即 BatchCallback)的 Neo4J-Java-REST 绑定。走这条路,我现在可以将我的所有操作作为一个批处理组合在一起,但是我必须处理 Node 对象而不是 SDN 映射的域对象。
这是正确的吗?
如果是,是否有任何机制可以让我使用 SDN 在 rest-batch-api 中处理我的域对象而不是核心实体(节点等)
我们的大部分领域对象创建都涉及以下步骤:
使用指定参数创建实体(比如 master)
在实体和所有者(恰好是用户)之间建立关系
一些用例在内部创建了额外的实体,并自动建立主实体和这些实体之间的关系
由于几乎每个实体都有自己的索引,因此创建的实体会添加到各自的索引中(通过@Indexed)
所有这些步骤都被视为原子操作
使用批处理 api (java-REST),它们是否被视为原子操作?我的印象是它们是作为批处理发送的,但不一定作为原子操作执行。
我的理解正确吗?如果是,我们如何将它们视为原子? 这是否保证我们开发服务器扩展?
此外,是否有任何从 SDN/嵌入式迁移到 SDN/REST 的指南/最佳实践?
由于我们之前使用的是 1.8,我们使用了手动索引,现在在 2.x 中我们有了我们想要采用的标签。在那儿 任何可用于将手动索引数据移至标签的指南/工具?
有没有介绍 neo4j 版本路线图的网页?
感谢和问候,
钱德拉
【问题讨论】:
标签: neo4j cypher spring-data-neo4j