2014-02-10 53 views
1

我正在探索neo4j的潜在用例,并且我发现关系模型非常好,但我很好奇数据库是否可以支持业务事务日志中的某些内容。使用Neo4j的节点状态跟踪/日志记录

例如,录像带出租店:

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

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

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

回答

1

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

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

根据您的具体问题,谨慎处理有很多关系的节点。在建模日期上签出this article。 Peter Neubauer在Neo4j文档中有一篇类似的文章。

+0

+1只需创建一个租赁节点,连接到您的客户,您的视频( s),也许是时间树。 –

1

我会看看它取决于你想摆脱它。如果您想要开发推荐引擎,或者查看用户和/或电影之间的关系,graphDB是一个非常自然的解决方案。如果您正在寻找随着时间的推移跟踪视频A的状态更改,则会为此建立一个时间数据库(http://en.wikipedia.org/wiki/Temporal_database)。对于一个直接的事务处理系统,传统的关系数据库将很容易工作。就个人而言,我认为你会有更好的选择与graphDB。在你的例子中,你将有3个消费者节点,1个视频节点,3种类型的关系:租金和两个:RETURNS。您需要确保您的属性模型支持重新租用同一部电影的相同用户(将日期存储在数组中,而不是单个值)。只是有些想法...

+0

如果客户A再次租用视频A,是否可以创建类型为:RENTS的新关系?是否支持? –

+0

hrm - 发表了一个完整的评论 - 只有第一部分留下了...无论如何,我认为你只能连接两个节点,并且有相同类型的关系(例如,你只能有一个(user:User) - [:RENTS ] - >(视频:视频),我会让其他更有知识的人提供需要这种解决方案的解决方案。 –