通过行进时间标记数据到某个点

时间:2018-08-12 18:35:40

标签: mysql algorithm data-structures data-analysis

在工作中,我受命寻找一种通过大约旅行时间来标记数据的方法。

我们的网站是用户可以在其上刊登房地产广告,出租/出售广告的地方。

因此,每个广告实体都有纬度,经度,有关该广告的一些信息,等等。

我们要标记例如靠近大学,高速公路入口点,海上,学校的广告,我们称这些兴趣点(POI)

我们的网站上大约有80万个广告,每天大约有1000万个新广告。

为了获得旅行时间,我们可以使用“开放旅行计划器”创建一个兴趣点的等时线,然后返回多边形,例如距离公共交通15分钟路程的位置。

因此,可以检查哪些广告位于这些多边形内,并将其标记为位于POI附近。但是我们可能有10k POI(每个学校,幼儿园等,每个POI 1个),对于每个等时线查询,您至少会得到10+个多边形, 而且这仅用于公共交通,对于其他类型的旅行(步行,汽车,自行车),我们将需要一个,例如4,每个等时线查询大约需要500毫秒才能从OTP生成。

正如您所看到的那样,数字正在变得越来越大,而且我们在寻找最佳解决方案方面遇到了困难。我们还认为,也许比使用OTP来获得大概的旅行时间更好的解决方案。

我们还拥有该国家/地区中每个地址的经度和纬度,大约有750k条目。因此,可以改为标记地址,然后将每个广告指向一个地址。

所以我有两个问题

  1. 您是否将OTP用于此任务,或者您是否知道针对此类问题的解决方案?

  2. 您将如何设计数据库,考虑到当前提到的问题,标记数据的最佳算法是什么?

最终结果将是能够向用户显示类似 例如,“此属性距离海边有10分钟的步行路程。”

1 个答案:

答案 0 :(得分:1)

大概您的应用程序的兴趣点变化不会像列表中那样频繁。

因此,您可以利用MySQL中的geospatial extension来构建等时线表。

每个兴趣点在表中可能有四行,每行分别代表5、10、15和20分钟的步行路程。每行中的等时线本身可以表示为POLYGON对象。

每当添加新的POI或流量模式更改时,您都很少使用OTP信息填充这些行。

然后,当您添加新列表时,可以使用该表查找附近的POI和旅行时间。

如果使用OTP的成本​​不太高,则每次添加新列表时都可以简单地使用它。这样,您就可以避免制作等时线表。

如果创建正确的索引,则这种应用程序完全可以在DBMS的功能范围内。

请使用最新版本的dbms。并调查一下postgreSQL:其地理空间功能比MySQL更成熟。