2013-03-05 63 views
4

我在Spring Data Neo4j项目中使用了Neo4j的简单和高级映射模式。自从我从简单映射切换到高级映射后,该项目的性能非常好,我的意思是比以前好很多。我没有确切的数字来呈现,但它肯定是众多的。有人可以澄清为什么先进的映射模式优于简单的映射吗?Neo4j的高级映射模式性能

我已阅读SDN文档中的Prorgramming Model页面,但找不到确切的原因。

为了记录,我使用Spring提供的@Transactional支持。

回答

5

是的,这是事实,因为高级映射只是一个关于节点和关系的薄包装,并通过数据库写入数据库(以及读取数据)。简单映射将数据复制出来。为了保持性能优势,请仅在事务中使用高级映射,您会很高兴。

如果您开始修改事务之外的实体,您将得到脏对象跟踪,并且它会开始将其复制回来。

0

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

例如,我有两个团队,有大约100名成员,团队也连接在一起(作为父母子女),@Fetch无处使用,表现仍然糟糕透顶。

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