如何在Spring管理的事务中手动管理Neo4j锁

2024-01-25

首先我会解释为什么我要手动设置写锁。我在基于 Spring Data Neo4j 的 Web 服务应用程序中使用 Neo4j 数据库。事务由Spring管理,我只使用@Transactional注释。但是,我对特定用例有问题,这会导致数据库不一致。我有一个事务性方法,其目的是在数据库中创建这样的节点/关系:

(p:人)-[:使用]->(s:SIM_Card{phoneNumber:"xxx"})

其算法如下:

-检查数据库中是否已经存在具有特定电话号码(唯一)的SIM_Card(通过@Query进行密码查询),

-如果是,则获取此节点,如果否,则创建它,

-检查是否有任何人通过USES关系附加到此SIM_Card(密码查询),

- 如果没有这样的人,则创建它并附加到 SIM_Card。

不幸的是,当有很多请求时,我的数据库 SIM_Cards 会附加到多个人。我假设该方法由两个并发线程执行。两者都读取数据库并搜索具有相同电话号码的SIM_Card,并且都得到数据库中还没有这样的SIM_Card的信息,因此它们创建它们,然后将两个单独的Person附加到它们。 PhoneNuber对于SIM_Card来说是唯一的,因此最终只有一张SIM_Card,但仍然有两个Person,这不是预期的情况。 为了解决这个问题,我想在单独的事务中创建 SIM_Card,然后创建 Person 并在另一个事务中附加到此 SIM_Card。在创建 Person 之前,我将检查是否没有已附加的 Person。然而,就在该检查之前,我想在 SIM_Card 上手动设置写入锁定,并且我假设其他事务将无法同时检查是否有/或没有任何人连接到该 SIM_Card。它必须等待锁被释放,然后它会看到该 SIM_Card 已附加了 Person,并且不会创建另一张 SIM_Card。

为了实现这一点,我必须以某种方式获得在 @Transactional 带注释的方法中设置 Neo4j 锁的能力,但我不知道该怎么做。我将衷心感谢您的帮助。


我想你必须放弃@Transactional在这种情况下,电线GraphDatabaseService实例到您的存储库(或服务)中,然后启动事务并手动获取写锁(http://neo4j.com/docs/stable/javadocs/org/neo4j/graphdb/Transaction.html#acquireWriteLock(org.neo4j.graphdb.PropertyContainer) http://neo4j.com/docs/stable/javadocs/org/neo4j/graphdb/Transaction.html#acquireWriteLock(org.neo4j.graphdb.PropertyContainer)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Spring管理的事务中手动管理Neo4j锁 的相关文章

  • Neo4j https 通信

    有没有办法只允许 https 而不是 http 与 Neo4j 服务器通信 另外 Neo4j Shell 的通信使用哪个通道 http 还是 https 这是来自 Neo4j 文档 HTTPS 支持 http docs neo4j org
  • Neo4j cpu 卡在 GC 上

    突然间 工作了一个月后 CPU 几乎没有使用 1 到 5 之间 neo4j 服务器在垃圾收集时 cpu 占用率达到 100 我在 ubuntu 4 处理器服务器上运行 neo4j entherprise 2 0 3 未嵌入 这是我的 neo
  • 当属性名称为参数时如何查询属性值?

    通常我们可以查询属性值 例如 Match n Product where n name iPhone X return n 但是 就我而言 我不知道应该匹配哪个属性 但我只知道值 在这种情况下属性名称就变成了一种变量 我想要这样的东西 Ma
  • neo4j:单向/双向关系?

    所以我研究了 neo4j 我可能会在即将到来的项目中使用它 因为它的数据模型可能非常适合我的项目 我查看了文档 但我仍然需要这个问题的答案 我可以将关系设置为单向吗 看来 Neo4j 的人很喜欢电影 所以我们继续吧 如果我有这样的图表 Ac
  • SET 查询中“在此上下文中无效使用聚合函数”(Neo4j)

    我想知道为什么这被认为是 Neo4j 的 Cypher 中聚合函数的无效使用 MATCH p Project EMPLOYS n Person SET p youngest MIN n age 虽然以下被认为是有效的用例 MATCH p P
  • Neo4j:检索连接到 Neo4j Rest 中的节点或通过 Cypher 的所有节点和关系

    我想检索所有节点以及连接到节点的关系 我尝试通过两种方式做到这一点 1st通过Neo4j REST API http docs neo4j org chunked milestone server java rest client exam
  • neo4j cypher节点之间的多重关系

    例如 a r gt b 两个节点之间存在多个r 每个r userId都是唯一的 例如 a r R userId user1 gt b a r R userId user2 gt b 对于 a r gt c 也是如此 而情况是a r gt b
  • Neo4j 的数据库级验证

    我使用 Neo4j 作为我的图形数据库 假设我想限制用户名字段的长度小于10 有没有办法在数据库级别施加这样的约束 现在 您必须在应用程序级别上执行此操作 或者通过注册一个事务提交挂钩来检查该属性字段是否符合特定标准 See http do
  • Spring Neo4j:通过不同控制台执行时相同的密码查询花费不同的时间

    通过不同控制台执行相同的密码查询会花费不同的时间 通过执行spring data neo4j 花了 8 秒 Query MATCH user User uid 0 FRIEND friend User RETURN friend publi
  • 使用 scala 检索与给定节点相关的 neo4j 节点

    我有 2 个名为 User node 和 Article node 的节点 它们通过关系相关联 文章节点 gt Written By gt 用户节点 如何获取给定用户节点写入的所有文章节点 我假设您正在使用嵌入式 neo4j 因此有一个类型
  • Neo4j.rb 创建独特的关系

    这是我的 Neo4j 活动节点 class User include Neo4j ActiveNode has many out following type following model class User end john User
  • Neo4j:插入 7k 节点很慢(Spring Data Neo4j / SpringRestGraphDatabase)

    我正在构建一个应用程序 我的用户可以在其中管理字典 其中一项功能是上传文件以初始化或更新词典的内容 我首先关注的结构部分是Dictionary CONTAINS gt Word 从一个空数据库 Neo4j 1 9 4 但也尝试过 2 0 0
  • 在巨大的数据集上创建独特的节点和关系 NEO4J

    我的问题与这个非常相似 如何通过neo4j中导入的csv文件创建独特的节点和关系 https stackoverflow com questions 25090255 how to create unique nodes and relat
  • 使用 neo4j 建模有序树

    我刚刚开始使用 neo4j 并且了解图形和关系的原理 但是我在想要建模的某些结构方面遇到了一些麻烦 我想在编程语言项目中使用它 并存储已解析源文件的 AST 从那里 我计划向节点添加大量额外的数据和关系 以帮助分析和工具 但基本的 AST
  • 使用java将数据从Neo4j导出到csv

    将数据从 Neo4j 导出到 CSV 的最佳方法是什么 我已使用链接中的 CSV 导入器将数据从 csv 导入到 neo4jhttps github com sroycode neo4j import https github com sr
  • 如何使用 spring-data-neo4j 配置 neo4j EmbeddedGraphDatabase (现已弃用)?

    我正在使用 spring data neo4j 3 1 1 Release 和 neo4j 2 1 2 我设法制作了一个运行良好的 spring 配置 但它使用了 org neo4j kernel EmbeddedGraphDatabase
  • Neo4j - 根据关系属性查找两个节点之间的最短路径

    我试图弄清楚是否有某种方法可以根据关系总和获得两个节点之间的最短距离 给出以下示例 neo4j 图像示例 https i stack imgur com fiJe1 png 上图代码 CREATE some point 1 Point ti
  • with 子句做什么?新4j

    I don t understand what WITH clause do in Neo4j I read the The Neo4j Manual v2 2 2 http neo4j com docs stable query with
  • 如何检索多个深度关系的节点 Neo4j Database Cypher?

    假设有一个简单的图如下 City name gotham lt LOCATED Tower name abc lt LOCATED Bank name CityBank City name gotham lt LOCATED Cinema
  • neo4j:CYPHER查询节点的所有属性

    我们正在评估 Neo4J 的未来项目 目前只是尝试学习 Cypher 及其功能 但到目前为止 我认为应该非常简单的一件事却让我无法理解 我希望能够查看任何给定节点的所有属性及其值 在 SQL 中 会是这样的 select from Tabl

随机推荐