Neo4j 合并和原子事务

2024-02-16

我正在运行下面的MERGE从客户端应用程序在 10 个并行线程中查询我的 Neo4j 服务器,newFoo and id所有 10 次运行的参数均相同:

MERGE (foo:Foo { id: {id} })
ON MATCH
SET foo = {newFoo}

运行此命令后,我运行以下查询以期望1但我反而得到10:

match (f:Foo)
return count(f)

我以为MERGE在原子事务中运行,但显然不是。我在这里做错了什么吗?

Update

下面是我用来重现该问题的代码:

public static async Task RunInParallel()
{
    var client = new GraphClient(new Uri("http://localhost:7474/db/data"), "neo4j", "1234567890")
    {
        JsonContractResolver = new CamelCasePropertyNamesContractResolver()
    };

    client.Connect();

    var foo = new Foo
    {
        Id = "1",
        Name = "Foo",
        Slug = "foo-bar-foo"
    };

    List<Task> tasks = new List<Task>();
    for (int i = 0; i < 10; i++)
    {
        var task = client.Cypher
            .Merge("(foo:Foo { id: {id} })")
            .OnMatch()
            .Set("foo = {newFoo}")
            .WithParams(new
            {
                Id = foo.Id,
                NewFoo = foo
            })
            .ExecuteWithoutResultsAsync();

        tasks.Add(task);
    }

    await Task.WhenAll(tasks.ToArray());
}

MERGE(本身)不保证唯一性。使用时MERGE(在独特的财产上)你应该总是创建一个唯一性约束 http://neo4j.com/docs/stable/query-constraints.html对于指定的属性:

CREATE CONSTRAINT ON (f:Foo) ASSERT f.id IS UNIQUE

这将确保您不会创建任何重复项。

Edit

MERGE没有唯一性约束不是线程安全的。添加唯一性约束可确保在写入之前持有索引锁,从而使操作线程安全。

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

Neo4j 合并和原子事务 的相关文章

  • Neo4j:插入 7k 节点很慢(Spring Data Neo4j / SpringRestGraphDatabase)

    我正在构建一个应用程序 我的用户可以在其中管理字典 其中一项功能是上传文件以初始化或更新词典的内容 我首先关注的结构部分是Dictionary CONTAINS gt Word 从一个空数据库 Neo4j 1 9 4 但也尝试过 2 0 0
  • 使用 Cypher,如何返回仅包含其属性子集的节点

    假设我在 Neo4j 中创建了一个节点 CREATE Thing a foo b bar 我可以编写一个查询来获取该节点及其所有属性 MATCH n Thing a foo RETURN n 返回 a foo b bar 但是是否可以匹配一
  • 如何使用 nosql 构建成就和徽章

    我目前有一个使用 mongodb 作为数据库的社交游戏应用程序 我的问题是 如果我想创建一个积分和徽章系统 有哪些建议 成就 徽章的业务逻辑可能会变得非常复杂并且非常临时 因此实时授予徽章似乎效率不高 我想象将跟踪的操作添加到队列中的某处
  • Neo4j 在 Cypher 查询运行中仅使用一个核心

    当我在 UI 中运行 Cypher 查询时 服务器中只有一个核心正在运行 查询会卡住或响应非常慢 我使用 Neo4j 3 0 7 社区 有人知道我可以使用所有核心进行哪些调整吗 单个 Cypher 查询仅限于单个线程 看到这个tweet h
  • 如何在ubuntu中从源代码安装postgresql的AGE扩展? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 由于我想尝试一下 Apache Age of postgresql 所以在阅读文档时我迷失了方向 有什么简单的解决方案吗 这是有关如何
  • 有没有办法从密码结果中删除 _id _type

    我使用 apoc convert toTree 过程将查询结果转换为树 然后过滤结果以仅获取几个属性 但是 在生成的有效负载中 我得到了两个无法删除的属性 id 和 type 这是我的查询 我应该只获取 prefLabel 和 uri MA
  • 参数映射不能用于 MERGE 模式

    我收到错误参数映射不能在合并模式中使用 我如何解决此错误 我正在使用下面的代码 我非常感谢任何帮助 提前致谢 MERGE u Person names RETURN u and data2 names name Keanu Reeves1
  • org.neo4j.kernel.GraphDatabaseQueryService 无依赖满足接口

    我只是编写一个简单的程序 将 GTFS 文件上传到 Neo4j Spatial 我相信这是一些配置错误或 Neo4j spatial 库的一些问题 这就是为什么我没有上传我的代码 这是指定的非常基本的代码here https github
  • 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:基于聚合函数过滤节点

    假设我有一个客户节点列表和每个客户下的订单列表 表示为与这些客户节点关联的订单节点 每个订单都有一个与其关联的成本数字属性 我想返回那些平均订单大于阈值的客户 这是一些无法运行的代码 说明了我想要的内容 MATCH n0 Customer
  • 如何检索多个深度关系的节点 Neo4j Database Cypher?

    假设有一个简单的图如下 City name gotham lt LOCATED Tower name abc lt LOCATED Bank name CityBank City name gotham lt LOCATED Cinema
  • 是否有工具可以将 Neo4j 图转储为 Cypher 并从 Cypher 重新加载它?

    每个熟悉 MySQL 的人都可能使用过 mysqldump 命令 它可以生成代表 MySQL 数据库中的架构和数据的 SQL 语句文件 这些 SQL 文本文件通常用于多种用途 备份 播种副本 在安装之间复制数据库 将产品数据库复制到临时环境
  • 获取两个顶点之间的边属性值时出现 ClassCastException

    我正在尝试获取两个顶点之间的边缘属性值并低于异常 java lang ClassCastException 无法将 java lang String 转换为 scala runtime Nothing 环境 内存中的泰坦 Code val
  • +=、|=、&= 等是原子的吗? [复制]

    这个问题在这里已经有答案了 修改 运算符是这样的吗 等等原子 I know 是原子的 如果你执行x 同时 在两个不同的线程中 你总是会得到x增加了 2 而不是x x 1优化关闭 我想知道是否variable constant 以及类似的东西
  • Neo4j 中合并和创建唯一之间的区别

    我试图找出合并和创建唯一之间的区别 我知道这些功能 合并 如果不存在模式 我可以创建节点 MERGE n name X RETURN n 这将创建具有属性名称的节点 n 空节点 m 和关系 RELATED MERGE n name X RE
  • 对原子变量的非原子操作,反之亦然[重复]

    这个问题在这里已经有答案了 给出以下代码 static int x static void f for int i 0 i lt 100 i atomic fetch add x 3 进一步 假设f由两个线程同时调用 C C 内存模型是否保
  • Neo4j 服务器无法使用非托管扩展启动

    我正在尝试在 neo4j 服务器 版本 CE 2 3 2 上使用非托管扩展 所以我正在尝试一个简单的你好世界的例子 http neo4j com docs stable server unmanaged extensions htmlNeo
  • OpenMP while 循环中的手动同步

    我最近开始使用 OpenMP 为大学的一个项目做一些 研究 我有一个矩形且均匀分布的网格 在该网格上我使用迭代方案求解偏微分方程 因此 我基本上有两个 for 循环 网格的 x 方向和 y 方向各一个 并由 while 循环包裹以进行迭代
  • 原始类型是易失性的还是同步的?

    在 Java 中 如果变量的大小小于或等于 32 位 则赋值是原子的 但如果变量的大小大于 32 位 则赋值不是原子的 在双重或长分配的情况下 使用什么 易失性 同步 会更有效 Like volatile double x y 同步不适用于
  • ArangoDB:(1 个具有多个边缘定义的图)Vs(每个图 1 个边缘定义)

    我想知道在一个图中拥有多个边定义与每个图都有一个边定义相比是否有任何优势 谢谢你的帮助 使用多个边缘定义而不是仅使用一个边缘定义有多种原因 显示内容差异 您可能需要不同的边缘集合bought and watched 不过 这也可以通过使用标

随机推荐

  • 使用django反向传递查询参数?

    我有一个应该像这样访问的网址 people raj updates people raj updates tag food 但是 Django 反向 URL 解析器似乎没有任何规定可做tag food 即将其检测为额外参数并放入查询字符串中
  • 如果我使用 DOT 和 doxygen,如何更改由 graphviz 创建的图表在 HTML 中的位置?

    我在 doxygen 中使用 dot 和 Graphviz 以 HTML 格式创建代码的用户手册 doxygen 代码看起来有点像这样 br addtogroup MainProgram dot digraph G Main label M
  • C++ 编译器什么时候开始考虑字符串文字字符转义中超过两个十六进制数字?

    我在 C 中有一个 生成的 文字字符串 其中可能包含需要使用转义的字符 x符号 例如 char foo xABEcho 然而 g 版本 4 1 2 如果重要的话 会抛出错误 test cpp 1 error hex escape seque
  • Ecto 与某种情况的关联

    假设我有两个模型 Post and Comment评论模型可以是两种类型中的一种 normal and fancy由列定义type in the comments table 现在我想在我的上添加 2 个关联Post模型 其中一个指的是花哨
  • 如何切换到单击按钮后打开的新浏览器窗口?

    我遇到的情况是 当单击按钮时会打开带有搜索结果的新浏览器窗口 有什么方法可以连接并聚焦到新打开的浏览器窗口吗 并使用它 然后返回到原始 第一个 窗口 您可以按如下方式在窗口之间切换 Store the current window hand
  • 更新后自动缩小 Javascript/CSS 文件吗?

    我知道缩小 JS 和 CSS 文件的方法 但是有没有办法在生产系统中自动缩小这些文件 例如 我修改了原始JS文件中的一些内容并更新了生产环境 但是 在使用 JS 文件时 应该使用 JS 文件的自动缩小版本 如果源文件发生更改 最好更新当前的
  • Solr(太阳黑子),最大结果超过 30?

    我通过 Sunspot for Rails 使用 Solr 但我不知道如何返回超过 30 个结果 假设我有这个搜索块 posts Post search do keywords something end 我如何确定太阳黑子应该返回all比
  • Git 别名为新分支的名称添加前缀

    有没有办法编写一个别名 将当前日期添加到新分支的名称中 例如 git branch today new branch name 应该创建新分支22 09 2015 new branch name name 创建一个 git 别名并将其添加到
  • 识别串口/USB设备python

    这个问题的解决方案可能非常简单 但我对动态与设备交互还很陌生 我正在做的是制作一个Python可执行代码 这样用户的计算机上就不必有Idle或任何类型的Python解释器 这意味着我不知道设备将插入哪个USB端口到 该程序需要能够打开与通过
  • 在 Nginx docker 中,我们如何仅从 error.log 中查看日志

    Nginx Docker 文件配置为将 error log 发送到 dev stderr RUN ln sf dev stdout var log nginx access log ln sf dev stderr var log ngin
  • 检查文档是否为ROOT节点

    我需要知道文档元素是否是页面的根节点 例如 lt ROOT Node lt other document lt other document 在 iframe 1 或 2 中执行的 JavaScript 应该知道它们的文档节点是否是根节点
  • 新库中的异步方法与非异步方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 NET 4 5 中 有许多方法现在以异步和非异步对的形式出现 例如Flush and FlushAsync 理想情况下 I O 交互在可能的
  • 如何在 mac 上结束 Tkinter python 模块,以便在程序完成后不必强制退出 python 启动器?

    这是我的代码 from Tkinter import app Tk app title example app geometry 400x300 200 200 b Button app text quit command app quit
  • EF - 具有自动迁移功能的新列的默认值

    我首先使用 EF 代码和自动迁移 我想向我的模型添加一个新列 一个布尔列来表示 活动 真 或 非活动 假 如何添加此列并为数据库中已有的行设置默认值 true 通过自动迁移 Tamar 您需要设置默认值 请参阅下一个示例 namespace
  • 如何防止操作栏被切断?

    当我将手机升级到 Marshmallow 后 我制作的所有应用程序的操作栏都被切断了 该应用程序在 Lollipop 和 Kitkat 上运行良好 该应用程序基本上只有一个视图 并且在我更新后的手机上无法正确显示 上半部分被切断 https
  • SSIS LookUp Transformation高级编辑器(修改SQL语句)

    我对SSIS中的查找转换有一个疑问 复选框 修改SQL语句 和参数选项有什么用 提前致谢 泽兰 感谢您的回答高德曼 我有一个场景 比如我的查找 参考 表正在访问 DB2 并且在 DB2 中我们有多个架构 我的要求是将架构名称作为参数传递给查
  • 使用 Maven 生成类路径文件

    我想从 pom xml 依赖项生成一个类路径文件 我需要它 所以在测试期间我有所有依赖项的类路径 稍后打包成一个包 maven dependency plugin不适合我有两个原因 它生成存储库中文件的路径 因此要使用它们首先需要运行的其他
  • 如何在 mips 汇编中迭代字符串

    所以我现在正在做一个项目 我们必须接受一个字符串并将其转换为所有大写字母 然后如果 toUpper 或 toLower 字节不是 0 则转换为小写字母 现在我仍在处理大写字母部分 猜测小写字母几乎相同 但是当我遍历字符串查找大写字母时或者当
  • 为什么将 `this` 分配给 `self` 并运行 `self.method()`?

    我正在阅读来源mongoose https github com LearnBoost mongoose blob master lib collection js L40 Collection prototype onOpen funct
  • Neo4j 合并和原子事务

    我正在运行下面的MERGE从客户端应用程序在 10 个并行线程中查询我的 Neo4j 服务器 newFoo and id所有 10 次运行的参数均相同 MERGE foo Foo id id ON MATCH SET foo newFoo