【问题标题】:How to model time-schedules of a public transport system in a graph database?如何在图形数据库中对公共交通系统的时间表进行建模?
【发布时间】:2020-03-27 13:35:57
【问题描述】:

假设我想使用 Neo4j 等图形数据库对公共巴士运输服务进行建模。

这种服务由一组公交车站、一组线路和一组将线路与公交车站联系起来的时间表组成。

查询数据库应回答诸如从城市的一个点到另一个点的最佳路线是什么(例如,按时间或步行最少或更改次数较少)等问题。

按照最常见的准则,公共汽车站和线路成为节点,每个节点都具有适当的属性(ID、地理位置和每个站的地址等)。

每条线都有带有标签startstop 的边线服务的开始和结束。随后的公交车站通过某些属性(例如线路、两个站点之间的距离等)与其他边相连。

如何在此类数据库中建模时间安排?将它们建模为公共汽车站(或连接它们的边)的键值属性是否很好,其值是包含时间的数组?

【问题讨论】:

  • 你找到什么了吗?
  • 我能找到的唯一有用的参考是:neo4j.com/blog/journey-planning-why-i-love-cypher/…。不幸的是,该页面只是一个演示文稿,缺少许多细节。您可以找出一些隐含的段落。很可能您将不得不根据您的目的修改或丢弃其中的一些。在某个地方(可能是 github)也有作者的个人页面。

标签: database neo4j data-modeling graph-databases


【解决方案1】:

听起来您主要关心的是如何为每条线路建模调度时间。如果我正确理解您的担忧,那是因为每条线路在两个巴士站之间每天可以有多个班次。

将所有时间表时间放在一个数组中并将其存储为公交车站的属性是可行的。但是,很难扩展到公共汽车以外的其他交通选择。所以在一个更具可扩展性的图模型中,顶点可以是一个地方,而边可以是两个地方之间的交通工具(不限于公共汽车)。交通选择的任何属性都可以是边缘的属性,包括时间表。

但是让我们以公共汽车为例。因此,假设您在相同的两个巴士站 A 和 B 之间有 m 条线路,并且您希望为每条线路安排每天 n 班次(实际上,不同线路的 n 可能不同,但这并不重要)。然后您可以在 A 和 B 之间创建 m*n 条边。在这种情况下,每条边只有一个属性作为其预定时间。然后,您可以使用排名来区分边缘。另一种方法是仅创建 m 个边并将 n 个移位定义为每个边上的属性。在这种情况下,每个边都有 n 个属性作为其计划时间。显然,前一种方式对以后的查询更友好。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2022-01-11
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多