Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 事务的neo4j锁_Java_Neo4j_Spring Data Neo4j - Fatal编程技术网

Java 事务的neo4j锁

Java 事务的neo4j锁,java,neo4j,spring-data-neo4j,Java,Neo4j,Spring Data Neo4j,我刚开始使用neo4j来评估它是否是推荐引擎的良好基础数据库。我想知道是否有关于在读写操作期间在实体上获得的锁的文档 例如,如果节点N分别通过关系R1和R2与节点N1和N2相关,如果关系R1正在创建或修改,则使用N、N1、N2或R2(可能是关系创建/修改或遍历)的任何操作是否会遇到块?直觉上,我猜不会,因为只有R1被写入,而这是唯一应该被锁定的实体。但是,我想这也取决于底层实现,特别是因为为每个关系提供了双向遍历(可能N和N1会被锁定?)。如果有人能给我指一些关于这方面的官方文件,那就太好了 如

我刚开始使用neo4j来评估它是否是推荐引擎的良好基础数据库。我想知道是否有关于在读写操作期间在实体上获得的锁的文档

例如,如果节点N分别通过关系R1和R2与节点N1和N2相关,如果关系R1正在创建或修改,则使用N、N1、N2或R2(可能是关系创建/修改或遍历)的任何操作是否会遇到块?直觉上,我猜不会,因为只有R1被写入,而这是唯一应该被锁定的实体。但是,我想这也取决于底层实现,特别是因为为每个关系提供了双向遍历(可能N和N1会被锁定?)。如果有人能给我指一些关于这方面的官方文件,那就太好了

如果这种锁定确实发生了,我能想到的解决问题的一种方法是将每个节点解析为用于每个关系目的的子节点,每个子节点都连接到根实体。(假设用户是社交用户,用户是产品用户等)


我想这会减少每个节点的关系数量,将根节点解析为写重和读重子节点,并允许快速检索某些子图。我能看到的唯一缺点是节点和关系的总数增加了n倍(我的数据库大小相对较小,n=4,所以我没有问题)。对于这些结论是否正确,如果正确,如果它们有助于提高性能和减少锁的数量,我们将不胜感激。

在创建R1(在N和N1之间)的第一个场景中,N和N1将被写锁锁定,这意味着对N或N1的其他写入将被阻止,而不是读取(如果读取前未手动发出读取锁定)

在R1以某种方式更改(属性集)的场景中,只有R1被锁定


如果您观察到争用的实际问题,那么将实体拆分为几个特定用途的子节点是一个相当好的解决方案。在大多数情况下,我看到使用的是关系类型拆分…这可能会通过计划的功能来解决,以便更好地处理密集连接的节点。这该功能可能会产生与此类似的效果。

我不太确定开始节点和结束节点是否已锁定,但它们似乎不应该锁定,请参阅链接。我在该页面的第3点中看到了我想要的内容。很好,很高兴能够提供帮助。请随时在博客上发布您的设置!仅供参考,链接现在是404