gpt4 book ai didi

architecture - Neo4j 实现评论

转载 作者:行者123 更新时间:2023-12-02 01:33:28 26 4
gpt4 key购买 nike

在我的 Spring Boot/Neo4j 应用程序中,我有一个 Neo4j 节点的大树,现在我想为每个节点实现分层注释。

现在我在考虑这些评论必须放在什么地方......在 Neo4j 数据库或其他一些外部 RDBMS/NoSQL 存储中。

为什么我会考虑它 - 因为我现在对 Cypher 的了解有限,我面临着删除繁重的 Neo4j 节点(与其他节点有很多关系的复合节点)的问题。我无法解决这个问题现在问题.. 所以引入新的 Comment 节点可以完全杀死我的系统。

那么你怎么看,我应该尝试解决删除问题还是在某些外部数据存储中实现评论?

已更新

这是我的慢删除查询:

MATCH (d:Decision) 
WHERE id(d) IN {decisionsIds}
OPTIONAL MATCH (d)-[r]-(t)
DELETE d, r
WITH t, r WHERE NOT (id(t) IN {decisionsIds})
OPTIONAL MATCH (t)-[r2:VOTED_ON|:CREATED_BY|:VOTED_FOR]-()-[r3:CONTAINS]-(t2) WHERE r2 <> r
WITH t, r2, t2, r3
WHERE none(x in labels(t)
WHERE x in ['User', 'Decision'])
DELETE t, r2, t2, r3

现在这个查询工作了很长时间,所以我不敢将新实体添加到决策节点,以免完全破坏性能。

有什么办法可以优化这个查询吗?

最佳答案

没有数据库,这是一个小优化的尝试,不确定是否有帮助。

了解更多关于域模型和元素之间的基数(例如 dt 之间)的信息也是很好的

MATCH (d:Decision) WHERE id(d) IN {decisionsIds} 
OPTIONAL MATCH (d)-[r]-(t)
DELETE d, r
WITH t, collect(r) as rels
WHERE NOT (id(t) IN {decisionsIds}) AND NOT t:User OR t:Decision
OPTIONAL MATCH (t)-[r2:VOTED_ON|:CREATED_BY|:VOTED_FOR]-(t1)
WHERE NOT (r2 in rels)
OPTIONAL MATCH (t1)-[r3:CONTAINS]-(t2)
DELETE t, r2, t2, r3;

更新

使用您的数据库进行测试,效果很好。关于你的说法,我不确定违反了哪些。

export decisionsIds=[332,336,335,334,333,340,339,338,337,344,343,342,341] 

MATCH (d:Decision) WHERE id(d) IN {decisionsIds}
OPTIONAL MATCH (d)-[r]-(t)
DELETE d, r
WITH t, collect(r) as rels
WHERE NOT (t:User OR t:Decision) AND NOT (id(t) IN {decisionsIds})
OPTIONAL MATCH (t)-[r2:VOTED_ON|:CREATED_BY|:VOTED_FOR|:CONTAINS]-(t1)
WHERE NOT (r2 in rels)
DELETE t, r2
WITH t1
OPTIONAL MATCH (t1)-[:CONTAINS]-(t2)
// will be detach delete in 2.3
FOREACH ( p IN (t2)--() | DELETE head(rels(p)))
DELETE t2;

+-------------------+
| No data returned. |
+-------------------+
Nodes deleted: 362
Relationships deleted: 723
340 ms

您可以像这样找到您的违规节点:

neo4j-sh (?)$ match (n)-[r]-() where id(n) = 86715 return labels(n),n,r;
+----------------------------------------------------------------------------------------------------------------------------------+
| labels(n) | n | r |
+----------------------------------------------------------------------------------------------------------------------------------+
| ["VoteGroup","_VoteGroup"] | Node[86715]{createDate:"1443124989049",avgVotesWeight:5.0,totalVotesCount:1} | :CONTAINS[173172]{} |
| ["VoteGroup","_VoteGroup"] | Node[86715]{createDate:"1443124989049",avgVotesWeight:5.0,totalVotesCount:1} | :VOTED_ON[173169]{} |
| ["VoteGroup","_VoteGroup"] | Node[86715]{createDate:"1443124989049",avgVotesWeight:5.0,totalVotesCount:1} | :VOTED_FOR[173170]{} |
+----------------------------------------------------------------------------------------------------------------------------------+

如果您想查看此查询触及/将被删除的所有数据,请使用:

MATCH (d:Decision) WHERE id(d) IN {decisionsIds} 
OPTIONAL MATCH (d)-[r]-(t)
WITH t, collect(r) as rels
WHERE NOT (t:User OR t:Decision) AND NOT (id(t) IN {decisionsIds})
OPTIONAL MATCH (t)-[r2:VOTED_ON|:CREATED_BY|:VOTED_FOR|:CONTAINS]-(t1)
WHERE NOT (r2 in rels)
OPTIONAL MATCH (t1)-[:CONTAINS]-(t2)
RETURN *;

然后您可以在结果中找到有问题的节点,并确保您删除了它们周围的所有内容(每个 rel-type)。

关于architecture - Neo4j 实现评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32711743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com