表示访问过的地方的图表

时间:2015-07-08 07:43:35

标签: graph neo4j graph-databases

您如何为特定日期的2个或更多人访问的地点建模?似乎它应该非常简单,但我不知道如何将它们联系起来,可以说,用户1和用户2在约会日期访问了X或者如何说他们在同一天一起访问了X.

我开始使用GraphViz来帮助可视化它:

digraph visit_example {
    node [shape = doublecircle]; "User 1" "User 2";
    node [shape = circle];
    "User 1" ->  Alaska [ label = "Visits" ];
    "User 2" ->  Alaska [ label = "Visits" ];
        "Jan 1st" -> Date [label = "is a"];
        "Mar 7th" -> Date [label = "is a"];
        "Dec 9th" -> Date [label = "is a"];
}

你如何改变上述说法,用户1在3月7日用户2访问了阿拉斯加?用户1独立于1月1日访问了阿拉斯加,12月9日访问了用户2?

1 个答案:

答案 0 :(得分:2)

图形数据库的优点(有时候不方便)是可以用多种方式对这些用例进行建模。

这还取决于您想要做什么类型的查询。

让我们说,您永远不会按时间查询,如果您愿意,查询时间并不重要,您可以轻松地将日期放在关系属性上。

(a:User)-[:VISITED {time:0123456789}]->(p:Place)

如果您希望按日期查询,那么您可以为:例如,有一个:访问节点代表用户的访问并且在其上有时间属性

(a:User)-[:DO_VISIT]->(v:Visit {time: 123456789})-[:IN_PLACE]->(p:Place)

然后,您可以按时间查询所有:Visit个节点

另一种解决方案是管理时间树,例如, GraphAware's TimeTree

然后您的访问节点将自动附加到TimeTree

(:Year {value:2015})-[:CHILD]->(:Month {value:7})-[:CHILD]->(:Day {value:8})<-[:EVENT_TIME]-(v:Visit)<-[:DO_VISIT]-(:User)

当然还有其他方法可以对其进行建模,尝试最符合您需求和查询效果的方法