【问题标题】:Neo4j's advanced mapping mode performanceNeo4j 的高级映射模式性能
【发布时间】:2013-03-05 10:14:23
【问题描述】:
我在我的 Spring Data Neo4j 项目中使用了 Neo4j 的简单和高级映射模式。由于我已经从简单映射切换到高级映射,因此该项目的性能非常好,我的意思是比以前好多了。我没有确切的数字可以提供,但肯定是很多。有人能解释一下为什么高级映射模式优于简单映射吗?
我已阅读 SDN 文档中的 Prorgramming Model 页面,但找不到确切原因。
为了记录,我正在使用 Spring 的 @Transactional 支持。
【问题讨论】:
标签:
java
performance
neo4j
spring-data-neo4j
【解决方案1】:
是的,这是真的,因为高级映射只是围绕节点和关系的一个薄包装器,并写入数据库(并且也读取)。简单映射复制数据进出。为了保持性能优势,仅在事务中使用高级映射,您会很高兴。
如果您开始在事务之外修改实体,您将获得脏对象跟踪,并且它会再次开始复制内容。
【解决方案2】:
我注意到,通过简单的映射,会有很多不必要的标签获取,即使不应该这样做。即使您不使用@Fetch,SDN 仍然(出于某种原因)为相关 Set 中的所有节点获取标签,在某些情况下甚至更进一步。
例如,我有两个大约 100 名成员的团队,并且这些团队也连接在一起(作为父子),而 @Fetch 没有在任何地方使用,性能仍然很糟糕。
所以我切换到高级映射来摆脱不必要的标签获取。在我看来,简单映射不应该再可用了,因为它与新的基于标签的 TypeRepresentationStrategy 配合得非常糟糕。似乎它不再适合标签了。