在Neo4j中,两个节点之间有数百万个定向关系可以吗?它会增加获取数据的延迟吗



我们有数百万用户,他们之间可以进行数百万笔交易。

假设有一个用户a每天向用户B付款。我们在a和B节点之间有一个关系SEND_MONEY_TO。

A----发送_MONEY_TO->B

在Neo4j中,有什么更好的设计来容纳这些数据。

选项A:每次交易发生时,我们都会创建一个新的关系边缘。

选项B:我们将保留一个事务列表作为同一关系边缘的属性,并在发生新事务时将事务详细信息附加到现有列表中。

我们的查询将看起来像:

a.(查找2021年4月使用HDFC信用卡的用户A和用户B之间的交易次数。

b.(查找涉及用户_A 的交易总额

我们也对任何新方法持开放态度。

我认为在未来,您可能需要向交易添加其他数据,如:卡:设备或:触发/执行的平台。您可能知道,无法在边和顶点之间创建边。

因此,我建议使用(:Transaction)顶点,边到(:Account(顶点。可以对边使用[:SENDER][:RECEIVER]类型。

以下是我过去对此进行建模的方式。你可能需要做一些调整来在Neo4j中建模,但总的要点是存在的。附上项目示例。


因为一个客户可能有多个账户

客户-(Customer_ACCOUNT(-账户

捕获交易的方向性

帐户-(SEND_TRANSACTION(->交易

帐户&lt-(RECEIVE_TRANSACTION(-交易

在这里,我捕获了min_Send、min_receive、max_Send和max的运行总数接收、事务发送计数、事务接收计数等

帐户-(SEND_TO(->账户


我在这里开源了这个项目:

  • https://github.com/TigerGraph-DevLabs/AMLSim_Python_Lab

谷歌标签示例:

  • https://colab.research.google.com/drive/1QnYXgypDYKMxuGfMLEtWcIVkp61njkrw?usp=sharing

最新更新