我们有数百万用户,他们之间可以进行数百万笔交易。
假设有一个用户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(->交易
帐户<-(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