图形数据库表示访问过的地方



如何为给定日期的2人或2人以上访问的地方建模?看起来应该很简单,但我不知道如何将它们联系起来,能够说,用户1和用户2在y日期访问了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与用户2在3月7日访问了阿拉斯加?用户1和用户2分别于1月1日和12月9日访问了阿拉斯加。

图形数据库的优点(有时也不方便)是这样的用例可以用多种方式建模。

这也取决于你想要做什么样的查询。

假设,您永远不会按时间查询,如果您要这样做,查询时间并不重要,您可以轻松地将日期放在关系属性上。

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

如果你想按日期查询,那么你可以用:Visit节点表示用户的访问,并在其上添加一个时间属性

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

则可以按时间查询所有:Visit节点

另一个解决方案是管理一个时间树,例如graphhaware的TimeTree

那么您的Visit节点将自动附加到时间树

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

当然还有其他的建模方法,尝试最适合您的需求和查询性能的方法

最新更新