4

我在 Spring Data Neo4j 项目中使用了 Neo4j 的简单和高级映射模式。由于我已经从简单映射切换到高级映射,因此该项目的性能非常好,我的意思是比以前好多了。我没有确切的数字可以提供,但肯定是很多。有人可以澄清为什么高级映射模式优于简单映射吗?

我已经阅读了SDN 文档中的编程模型页面,但我找不到确切的原因。

作为记录,我正在使用 Spring 的 @Transactional 支持。

4

2 回答 2

5

是的,这是真的,因为高级映射只是围绕节点和关系的一个薄包装器,并写入数据库(并且也读取)。简单映射复制数据进出。为了保持性能优势,只在事务中使用高级映射,你会很高兴。

如果您开始修改事务之外的实体,您将获得脏对象跟踪,并且它将开始再次将内容复制回来。

于 2013-03-05T10:48:45.733 回答
0

我注意到,通过简单的映射,即使不应该有很多不必要的标签提取。即使您不使用@Fetch,SDN 仍然(出于某种原因)为相关 Set 中的所有节点获取标签,在某些情况下甚至更进一步。

例如,我有两个大约有 100 名成员的团队,并且这些团队也连接在一起(作为父子),而 @Fetch 没有在任何地方使用,性能仍然很糟糕。

所以我切换到高级映射来摆脱不必要的标签获取。在我看来,简单映射不应该再可用了,因为它与新的基于标签的 TypeRepresentationStrategy 配合得非常糟糕。似乎它不再适合标签。

于 2014-10-30T11:58:04.603 回答