当前位置: 首页 > 知识库问答 >
问题:

Neo4j 2.0合并唯一约束性能缺陷?

慕凌龙
2023-03-14

情况是这样的:我有一个节点,它有一个属性ConrectId,它被设置为唯一和索引。节点标签为:联系人(节点:联系人{ConrectId: 1})

我有另一个类似于地址模式的节点:(node2:地址{地址: 1})

我现在尝试添加一个新节点,该节点(在其他属性中,包括ContactId(用于引用))(节点3:ContactAddress{AddressId:1,ContactId:1})

当我为每个节点运行merge命令时,添加包含在另一个节点类型中设置为唯一的属性的节点的时间似乎会使过程慢得多。

联系人地址节点仅包含联系人和地址节点之间的关系属性。联系人和地址节点各自最多包含10个属性。这是一个错误,Neo4j正在检查属性密钥-

代码和屏幕截图如下:

string strForEach = string.Format("(n in {{{0}}} |  
MERGE (c:{1} {{{2} : n.{2}}}) SET c = n)", propKey, label, PK_Field);

var query = client
            .Cypher
            .ForEach(strForEach)
            .WithParam(propKey, entities.ToList());

共有1个答案

张绍晖
2023-03-14

约束检查比仅仅插入更昂贵。它们还对约束进行全局锁定,以防止多次插入。

我看到您不使用参数,但使用字符串替代,我真的建议您更改它并使用参数。

同时,将整个节点c设置为n将再次触发约束检查。

您可能想使用MERGE

(n in {nodes} |  
MERGE (c:Label {key : n.key}}) ON CREATE SET c.foo = n.foo, c.bar = n.bar )
 类似资料:
  • 这是我的限制: 该查询证明约束实际上不起作用: 下面是输出: 为什么唯一性没有被强制执行?

  • 我使用LOAD CSV导入大量的节点和关系集合。我使用MERGE来获取或创建节点。为了提高性能,我还为node属性创建了一个唯一的索引。 问题是进口约1MIO。边缘表现非常糟糕。我分析了导入查询和单个合并查询,但我看不到唯一索引的任何用法。相反,匹配查询使用索引。如何将合并与索引一起使用?

  • 问题内容: 我一直在尝试找出是否有可能对两列的组合具有唯一约束。 具体来说,我有两列A和B。 我有下面这样的行 然后我希望以下组合在插入时失败 我尝试添加一个简单的约束 但这让我在已经存在时插入。 这可能吗?还是在插入之前必须检查组合是否存在? 问题答案: 您可以使用表达式的索引来执行此操作: 我不认为约束允许表达式(并且现在没有方便的Postgres进行测试),但这本质上是同一回事。

  • 主要内容:在创建表时设置唯一约束,在修改表时添加唯一约束,删除唯一约束MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。 唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但

  • 主要内容:Oracle唯一约束语法,Oracle唯一约束例子在本教程中,您将学习如何使用Oracle唯一约束来确保包含在一列或几列中的数据在表中的行之间是唯一的。 Oracle唯一约束语法 一个唯一的约束是一个完整性约束,它确保存储在一列或一组列中的数据在表中的行之间是唯一的。 通常,在使用内联约束语法创建表时,将唯一约束应用于列,如下所示: 此唯一约束指定中的值在整个表中是唯一的。也可以使用外线()约束语法来定义一个唯一的约束: 可以通过使用子句和约束名

  • 当我试图创建第二个表时,我遇到了以下错误,但我不知道为什么。对于表patente,我希望能够将(idfunconario,titulo)作为主键。正如其他主题中所建议的,我已经尝试将唯一约束设置为“唯一(IDFunconario,titulo)”。 消息错误: 错误:没有唯一的约束匹配引用表"public acao"的给定键SQL状态:42830 我在64位的Windows 8.1上使用Postg