在 Neo4j 中存储事务的最佳方法是什么?

What's the best approach to store transactions in Neo4j?

我是图表世界的新手,今天,当我对一些图表进行建模以控制帐户交易时,我遇到了以下问题:"What's the best approach to store transactions when we are talking about dates?"

想到了两个节点,账户和交易,节点交易的交易日期如属性

我想到了两个节点,账户和交易,以及交易日期像属性的关系。

现在,我正在考虑一个节点用于账户,另一个节点用于数年,另一个节点用于数月,另一个节点用于数天,然后另一个用于交易,就像一棵树。

哪个(或者万一我们有另一个呢)最适合在 Neo4j 中使用?哪一个性能最好?当我有 10 亿笔交易时,哪笔交易最好?

谢谢大家! 阿兰·奥利维拉

P.S.:对不起我的英语。

正如 Cyber​​sam 所提到的,有很多方法可以对数据进行建模。

由于 Neo4j 是无模式的,这在建模时通常是一个优势,但有时恰恰相反。

看完评论我就给两分钱:

  1. 交易是绑定到多个账户的事件,并且在它们之间有路径。

要检索帐户的最后一笔交易,通常的做法是使用链表

(account)<-[:LAST_TRANSACTION]-(transaction)<-[:PREVIOUS_TRANSACTION]-(transaction)

当你想在你的图中的多方之间进行模式匹配时,这有一些优势,但是当使用 Cypher 时,这是一个写入时间的繁重操作(虽然你需要有一个大的写入吞吐量才能达到它,但我已经在一个应用程序中达到了),在 Java 没问题。

这里有一些文档:http://neo4j.com/docs/stable/cypher-cookbook-newsfeed.html

  1. William 建议使用 TimeTree 插件来管理日期,这是一个不错的选择,我感谢他(注意:我在产品背后的公司工作)。这使您能够在时间树和图中的其他方之间进行一些额外的模式匹配。这可以毫无问题地支持非常高的写入吞吐量。

Nb:我看到有人使用 TimeTree 按日、月、年计算事件。如果你的用例不超过,Timetree和Neo4j不会给你带来任何满足的基本操作,Redis会表现得更好。

  1. 拿一篇论文,问你一个关于你想问你的图的问题,并将问题画成节点和关系,所以要明确,问你想要检索什么而不是如何。重复 10、20、30 次,你会发现,通过想象你所画的内容,新问题自然会出现。然后对其进行测试,尝试加载一些数据并进行一些查询。

  2. 如果还有不明白的地方,请扫描您的图纸并使用您找到的问题组修改此处的问题,我们一定很乐意为您提供帮助。