使用Neo4j进行节点状态跟踪/记录

时间:2014-02-10 20:20:39

标签: neo4j

我正在探索neo4j的潜在用例,我发现关系模型很棒,但我很好奇数据库是否可以支持业务事务日志中的某些内容。

例如,视频租赁商店:

  • 客户A于01/01/2014租用视频A
  • 客户A于2014年1月20日返回视频A
  • 客户B于2014年1月25日租用视频A
  • 客户B于2014年2月15日返回视频A
  • 客户C于2014年3月10日租用视频A
  • 等...

业务要求是跟踪与视频A节点相关的所有租赁交易关系。

这似乎在技术上是可行的。每次新的租赁发生时,是否会建立新的关系?有没有更好的方法来解决这个问题?这是对技术的误用吗?

2 个答案:

答案 0 :(得分:1)

我会根据你想要摆脱的东西来看待它。如果您正在寻找开发推荐引擎,或者看到用户和/或电影之间的关系,graphDB是一个非常自然的解决方案。如果您正在考虑跟踪视频A的状态变化,那么会为该模型(http://en.wikipedia.org/wiki/Temporal_database)建模时态数据库。对于直接的事务系统,传统的关系数据库将很容易地工作。就个人而言,我认为使用graphDB会有更好的选择。在您的示例中,您将拥有3个消费者节点,1个视频节点,3个类型的关系:RENTS和两个:RETURNS。您需要确保您的属性模型支持同一用户重新租用同一部影片(将日期存储在数组中,而不是单个值)。只是一些想法...

答案 1 :(得分:1)

尼斯!这是导致我开发FlockData(github链接)的确切用例。 FD使用Neo4J来跟踪域文档的事件类型活动(在您的示例中为Rental)。然后使用标签创建表示与域doc(电影/人物)相关联的元数据的节点。您有一个事件节点,用于租赁状态的每次更改。在LinkedIn上显示“用户已创建”,“用户已批准”和“用户已审核”的图表。

FD使用3个数据库来实现其目标 - Neo4j用于关系网络,KV存储用于庞大的数据(Redis或Riak)和ElasticSearch以允许用户通过自由文本找到他们的业务上下文文档(Rental)。

就您的具体问题而言,请注意具有大量关系的节点。结帐this article有关建模日期的信息。 Peter Neubauer在Neo4j文档中有一篇类似的文章。