【发布时间】:2016-01-19 07:31:13
【问题描述】:
我正在使用地图服务,给定一个地理圆(由坐标和半径定义),返回该区域的一组地点。我希望缓存此地图服务返回的结果。
我希望我的缓存可以存储两个表:
- 服务返回的地点列表地点。
- 表格 Circles 区域的位置已缓存在表格 Places 中。
然后,给定一个任意的新圆C,我想有效地测试缓存中C的区域是否被表中的圆完全覆盖圈子。如果 C 被完全覆盖,我有一个缓存命中,我不需要咨询地图服务。如果 C 没有完全覆盖,我必须咨询地图服务并缓存结果。
Q1:如何存储一组地理圆,以便我可以有效地测试它们的区域的并集是否完全覆盖任意新圆?
即使使用 Q1 的解决方案,我也可能会遇到缓存未命中非常轻微的性能问题,并且我向地图服务发出请求,这几乎不会增加我的缓存区域。为了解决这个问题,我希望能够在 C 中找到一个未被圆圈覆盖的示例点,以便将其用作地图服务请求的中心。我将重复这个过程,直到 C 被完全覆盖。
Q2:如何存储地理圆集,以便在它们的区域不完全覆盖给定圆C的情况下,我可以在 C 中有效地生成一个未被覆盖的示例点?
我希望使用 PostgreSQL 和 PostGIS 之类的东西来实现我的缓存,但我欢迎其他建议。
【问题讨论】:
-
你真的想要缓存吗?索引不够(postgresql.org/docs/9.4/static/xindex.html#XINDEX-ORDERING-OPS)?
-
@ЕгорРогов 也许我并不清楚:我的 PostGIS 数据库是来自外部地图服务的结果缓存。我不需要针对我的数据库的查询缓存。
标签: postgresql caching geospatial postgis geo