在工作中,我的任务是找到一种方法,用大概的旅行时间来标记我们的数据。
我们的网站是一个地方,用户可以放置房地产广告,出租/出售。
所以每个广告实体都有纬度,经度,一些关于广告的信息等等。
例如,我们想给靠近大学、高速公路入口、海洋、学校的广告贴上标签,我们称之为兴趣点(poi)。
我们的网站上有大约80万个广告,每天有大约1万个新广告。
为了得到旅行时间,我们可以使用open trip planner创建感兴趣点的等时线,然后返回多边形,例如乘坐公共交通工具15分钟路程的位置。
因此,可以检查哪些广告在这些多边形内,并标记它们靠近poi。但是我们可能会有10k的poi(每个学校、幼儿园等各1个),对于每个等时线查询,你至少会得到10+个多边形,而这仅仅是公共交通,我们将需要一个用于其他类型的旅行(步行、汽车、自行车),比方说4个,每个等时线查询大约需要500毫秒才能从otp生成。
正如你所看到的数字越来越大,我们很难找到最好的解决方案,而且我们认为也许有一个更好的解决方案比使用otp来获得近似的旅行时间。
此外,我们有在国家的每个地址的纬度和经度,这是大约75万个条目,因此有可能标签的地址,而不是,然后每个广告指向一个地址。
所以我有两个问题
你会使用otp来完成这项任务,还是你知道一个现成的解决方案来解决这类问题?
考虑到当前提到的问题,您将如何设计您的数据库以及标记数据的最佳算法是什么?
最终的结果将是能够向用户显示类似于“这个属性是从海上步行10分钟”的内容。
1条答案
按热度按时间njthzxwz1#
想必你的应用程序的兴趣点不会像你的列表那样经常改变。
因此,您可以利用mysql中的地理空间扩展来构建一个等时表。
每个兴趣点在表中可能有四行,每行分别用于步行5、10、15和20分钟。每行中的等时线本身可以表示为多边形对象。
无论何时添加新的poi,还是当流量模式发生变化时,您都很少使用otp信息填充这些行。
然后,当您添加一个新列表时,您可以使用该表查找附近的poi和行程时间。
如果使用otp的成本不是太高,那么您可以在每次添加新列表时使用它。这样就可以避免制作等时线表。
如果您创建了正确的索引,那么这类应用程序完全在dbms的能力范围内。
一定要使用最新版本的dbms。并调查postgresql:它的地理空间特性比mysql更成熟。