Neo4j 中两个节点之间有数百万个定向关系是否可以?它会增加获取数据的延迟吗?
Is it OK to have millions of directed relationships between two nodes in Neo4j? Will it add to latency in fetching the data?
我们有数百万用户,他们之间可以进行数百万次交易。
假设有一位 user_A 每天向 user_B 付款。我们在 A 和 B 节点之间建立了 SEND_MONEY_TO 关系。
A ---SENDS_MONEY_TO---> B
在 Neo4j 中容纳这些数据的更好设计是什么。
选项A:每次交易发生时,我们都会创建一个新的关系边。
选项 B:我们将保留一个交易列表作为同一关系边缘的 属性,并在新交易发生时将交易详细信息附加到现有列表。
我们的查询将如下所示:
a.) 查找使用 HDFC 信用卡的 2021 年 4 月 user_A 和 user_B 之间的交易数量。
b.) 找出涉及 user_A
的交易总额
我们也对任何新方法持开放态度。
我假设将来您可能希望将其他数据添加到交易中,例如它所在的 :Card :Device 或 :Platform triggered/Executed。您可能知道,您不能在边和顶点之间创建边。
因此我建议使用 (:Transaction)
顶点,边到 (:Account
) 顶点。您可以对边缘使用 [:SENDER]
和 [:RECEIVER]
类型。
这是我过去对此建模的方式。您可能需要进行一些调整才能在 Neo4j 中对其进行建模,但总的要点就在那里。附加示例项目。
Because a customer might have multiple accounts
客户 -(CUSTOMER_ACCOUNT)- 账户
Capture the directionality of the transactions
账户 - (SEND_TRANSACTION)-> 交易
账户<-(RECEIVE_TRANSACTION)-交易
Here I capture a running total of min_Send, min_receive, max_send, max
receive, transaction_send_count, transaction_recive_count, etc
账户-(SEND_TO)->账户
我在这里开源了这个项目:
示例 Google Colab:
我们有数百万用户,他们之间可以进行数百万次交易。
假设有一位 user_A 每天向 user_B 付款。我们在 A 和 B 节点之间建立了 SEND_MONEY_TO 关系。
A ---SENDS_MONEY_TO---> B
在 Neo4j 中容纳这些数据的更好设计是什么。
选项A:每次交易发生时,我们都会创建一个新的关系边。
选项 B:我们将保留一个交易列表作为同一关系边缘的 属性,并在新交易发生时将交易详细信息附加到现有列表。
我们的查询将如下所示:
a.) 查找使用 HDFC 信用卡的 2021 年 4 月 user_A 和 user_B 之间的交易数量。
b.) 找出涉及 user_A
的交易总额我们也对任何新方法持开放态度。
我假设将来您可能希望将其他数据添加到交易中,例如它所在的 :Card :Device 或 :Platform triggered/Executed。您可能知道,您不能在边和顶点之间创建边。
因此我建议使用 (:Transaction)
顶点,边到 (:Account
) 顶点。您可以对边缘使用 [:SENDER]
和 [:RECEIVER]
类型。
这是我过去对此建模的方式。您可能需要进行一些调整才能在 Neo4j 中对其进行建模,但总的要点就在那里。附加示例项目。
Because a customer might have multiple accounts
客户 -(CUSTOMER_ACCOUNT)- 账户
Capture the directionality of the transactions
账户 - (SEND_TRANSACTION)-> 交易
账户<-(RECEIVE_TRANSACTION)-交易
Here I capture a running total of min_Send, min_receive, max_send, max receive, transaction_send_count, transaction_recive_count, etc
账户-(SEND_TO)->账户
我在这里开源了这个项目:
示例 Google Colab: