gpt4 book ai didi

neo4j - 在 Neo4j 中表示(和增加)关系强度

转载 作者:行者123 更新时间:2023-12-04 04:07:18 24 4
gpt4 key购买 nike

我想在 Neo4j 图中表示节点之间关系的变化强度。

对于静态图,这很容易通过在关系上设置“强度”属性来完成:

  A --knows--> B
|
strength
|
3

但是,对于需要随时间更新的图形,存在一个问题,因为增加属性的值不能原子地(通过 REST 接口(interface))完成,因为需要先读后写。如果图形正在更新以响应传入的流数据,则需要递增(而不仅仅是更新)。

我需要确保只有一个 REST 客户端一次读取和写入(外部同步),或者只使用嵌入式 API,以便我可以使用内置事务。这可能是可行的,但似乎很尴尬。

另一种解决方案可能是记录多个关系,没有任何属性,因此“强度”实际上是关系的计数,即
A knows B
A knows B
A knows B

表示强度关系 3。
  • 缺点:只能记录整数强度
  • 优点:无需读写前
  • 缺点:(可能)需要更多存储空间
  • 缺点:(可能)提取值要慢得多,因为必须提取和计算多个关系

  • 有没有人尝试过这种方法,是否可能会遇到性能问题,尤其是在阅读时?

    有没有更好的方法来建模这个?

    最佳答案

    好主意。
    为了减少存储和多次读取,这些关系可以在以事务方式运行的批处理作业中聚合为一个。

    每个 rel 还可以携带一个单独的权重值,其聚合值用作权重。它不必是基于整数的,也可以是负数来表示递减。

    您还可以编写一个小型服务器扩展来以事务方式更新单个关系的权重值。甚至可能对 REST API 有意义(因为除了“设置单值”操作之外,还有一个修改单值操作。

    PUT http://localhost:7474/db/data/node/15/properties/mod/foo 

    正文包含增量值 (1.5, -10)。另一个想法是用实际操作替换 mode 关键字。
    PUT http://localhost:7474/db/data/node/15/properties/add/foo 
    PUT http://localhost:7474/db/data/node/15/properties/or/foo
    PUT http://localhost:7474/db/data/node/15/properties/concat/foo

    在非整数情况下,“增量”是什么意思?

    关于neo4j - 在 Neo4j 中表示(和增加)关系强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8474781/

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