gpt4 book ai didi

neo4j - 节点类别作为标签、作为节点还是作为标签和节点?

转载 作者:行者123 更新时间:2023-12-01 11:42:20 31 4
gpt4 key购买 nike

我正在尝试决定是否应该将类别实现为节点或标签。
尤其是获取属于某个类别的节点数的查询并不是那么容易。
节点必须能够属于更多类别!

类别作为标签,变体 1
在某处保留类别列表,然后:

MATCH a:cat1, b:cat2, c:cat3, ...

有了很多类别,我会得到很多列 .. 所以这不是很好。还有很多对查询的预处理。
甚至不确定我是否可以轻松地从中得到计数。

类别作为标签,变体 2

MATCH n:category <-- the category label is used to limit the amount of nodes
RETURN DISTINCT labels(n), count(*) as count

将返回如下内容:

["category","the actual category label"], 2

看起来很完美,但是当一个节点有多个类别时这将不起作用

["category","cat1","cat2"], 2 <-- two nodes found with category "cat1" and "cat2"
["category","cat1"], 4 <-- four nodes found with category "cat1"

现在我不知道如何获得每个类别的计数...
也许用 extract(..labels()..)filter(..labels()..) 可以做到,但我没有知识。

类别作为节点是的,这行得通……这很简单。但是标签不应该是对节点进行分类的东西吗?加上我将创建的所有额外关系..

也许我应该同时将其实现为标签和节点?
然后使用标签,我可以快速获得具有类别的每个节点。通过一个节点,我可以获得类别计数。

我仍在寻找关于这个问题的好的观点,所以我还不能给出具体的实现问题。

最佳答案

我的两分钱。

对于您的类别,我会为每个类别使用一个节点,并从属于该类别的节点创建 BELONGS_TO 关系。我的这种偏好有很多原因。

添加标签的原因之一是许多人在节点上放置了“类型”属性。另一种谈论标签的方式是它们为您的图形添加了一点“模式”——从某种意义上说,您可以对节点进行分类。

随着标签的引入,它们总是存在被滥用的风险。它只是数据库中的一个额外工具,主要用于存储图形。在极端情况下,您可以对几乎所有内容使用标签,最终得到“标记”节点的存储。

最后,遍历关系是 Neo4j 做的最快的事情。我们说的是微秒单位。不要害怕向一个节点添加数千个关系。我会为开发人员定义的“类模式”信息留下标签。

因此,对于用户添加的类别,我肯定会创建类别节点和 BELONGS_TO 关系,以支持标签。

最后一点免责声明,这是一种 self 营销。如果你达到每个节点有数万或数百万个关系的地步,而你所追求的只是对关系进行计数,那么将这些计数作为属性缓存在节点上可能是个好主意。我为 Relationship Count Module 开发了一个名为“GraphAware Framework ”的模块,正是这样做的。我已经在我的理学硕士类(class)中展示过。论文将在几周后公开,该模块将高阶顶点的计数查询速度提高了几个数量级,写入吞吐量损失仅为 10-25%。如果您需要更多详细信息,请告诉我。

关于neo4j - 节点类别作为标签、作为节点还是作为标签和节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18561351/

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