建模图形数据库时的最佳做法是跟踪关系发生变化的日期和时间,以便在需要时能够重建事件序列的任何部分导致当前的图表?
例如,让我们假设以下内容:
在没有更好的建议的情况下,我正在考虑做以下事情:
答案 0 :(得分:1)
显然,不同的图形数据库可能存在实现差异。但我的看法是:
创建Edge" friends"与属性"开始"并且"停止"。仅在友谊结束时设置已停止的属性。你可以有多个朋友"人与人之间的边缘,如果关系重新开始。
我正在复制Pixy Tutorial"幸存者和参数"部分。我相信这个例子与你的问题非常相似。它使用Prolog来编写查询的一部分,在我看来是一个非常好的主意。
gremlin> pt = pt.extend(''' \
livingAsOf(Person, Year) :- property(Person, 'born', Year1), Year1 =< Year, livingAsOfSub(Person, Year). \
livingAsOfSub(Person, Year) :- property(Person, 'died', Year2), Year2 >= Year. \
livingAsOfSub(Person, Year) :- not(property(Person, 'died', _)). \
''')
gremlin> g.V().as('p').pixy(pt, 'livingAsOf($, ?)', 1950) \
.select(['p'], {it.name + ', born ' + it.born + (it.died ? ', died ' + it.died : '') })
2014-08-22更新: 关于db特定的实现,在Cassandra支持Titan的情况下,存储&#34;已启动&#34;并且&#34;停止&#34;字段作为一个集合并具有单一的友谊关系边缘。我想从多个友谊边缘撤回,因为它可能会增加不必要的复杂性,但某些数据库和查询模式可能会更好地使用该模式。使用Titan-Cassandra,您可能会发现重复首次启动和最后停止的情况作为字段,并且具有我上面提到的另一个字段,这仅适用于友谊停止和重新启动的情况。这取决于您选择的数据库以及您的查询模式。因此,测试是您在评论中写下的方式。