在工作中,我受命寻找一种通过大约旅行时间来标记数据的方法。
我们的网站是用户可以在其上刊登房地产广告,出租/出售广告的地方。
因此,每个广告实体都有纬度,经度,有关该广告的一些信息,等等。
我们要标记例如靠近大学,高速公路入口点,海上,学校的广告,我们称这些兴趣点(POI)
。我们的网站上大约有80万个广告,每天大约有1000万个新广告。
为了获得旅行时间,我们可以使用“开放旅行计划器”创建一个兴趣点的等时线,然后返回多边形,例如距离公共交通15分钟路程的位置。
因此,可以检查哪些广告位于这些多边形内,并将其标记为位于POI附近。但是我们可能有10k POI(每个学校,幼儿园等,每个POI 1个),对于每个等时线查询,您至少会得到10+个多边形, 而且这仅用于公共交通,对于其他类型的旅行(步行,汽车,自行车),我们将需要一个,例如4,每个等时线查询大约需要500毫秒才能从OTP生成。
正如您所看到的那样,数字正在变得越来越大,而且我们在寻找最佳解决方案方面遇到了困难。我们还认为,也许比使用OTP来获得大概的旅行时间更好的解决方案。
我们还拥有该国家/地区中每个地址的经度和纬度,大约有750k条目。因此,可以改为标记地址,然后将每个广告指向一个地址。
所以我有两个问题
您是否将OTP用于此任务,或者您是否知道针对此类问题的解决方案?
您将如何设计数据库,考虑到当前提到的问题,标记数据的最佳算法是什么?
最终结果将是能够向用户显示类似 例如,“此属性距离海边有10分钟的步行路程。”
答案 0 :(得分:1)
大概您的应用程序的兴趣点变化不会像列表中那样频繁。
因此,您可以利用MySQL中的geospatial extension来构建等时线表。
每个兴趣点在表中可能有四行,每行分别代表5、10、15和20分钟的步行路程。每行中的等时线本身可以表示为POLYGON对象。
每当添加新的POI或流量模式更改时,您都很少使用OTP信息填充这些行。
然后,当您添加新列表时,可以使用该表查找附近的POI和旅行时间。
如果使用OTP的成本不太高,则每次添加新列表时都可以简单地使用它。这样,您就可以避免制作等时线表。
如果创建正确的索引,则这种应用程序完全可以在DBMS的功能范围内。
请使用最新版本的dbms。并调查一下postgreSQL:其地理空间功能比MySQL更成熟。