2016-01-11 103 views
0

例如,如果我想要一个查询,说:“给我50公里内所有的房子在这里,责令从最接近最远”,这些都是问题和担忧,我有:GeoDjango内置和PostGIS的距离查询效率的担忧

  1. 假设我们使用EC2(具有GeoDjango的应用程序服务器)和RDS(具有PostGIS的数据库服务器),似乎该查询将在RDS上执行。这是一个问题,不是吗?不仅RDS针对IOPS进行了优化,而且我们只有一个RDS实例服务于所有EC2实例。如果这个距离查询只比读取所有的纬度和经度稍微贵一点,那将是值得的。

  2. GeoDjango或PostGIS是否足够聪明,能够仅在距离合理距离的房屋上运行精确的距离计算,跳过所有距离太远的房屋?例如,它可以计算给定半径的最大边界,并且只计算这些边界内的房屋的距离。

  3. 在GeoDjango/PostGIS中是否存在不太精确的计算距离的方法,所以我们可以牺牲速度的精度?如果不是,那么推出我们自己的解决方案会更好吗?

回答

0

嗯,这实际上是十个问题。

1)如果这个距离查询只比读取所有纬度和经度稍微昂贵一些,它将是值得的。

与读取所有行相比,距离查询并不昂贵。

2)GeoDjango或PostGIS足够智能 Postgis一定会足够聪明。 GeoDjango只构建查询,查询由postgis执行。 http://postgis.net/docs/ST_DWithin.html

3)在GeoDjango/PostGIS中是否存在不太精确的计算距离的方法,所以我们可以牺牲速度的准确性?否则,

没有必要牺牲速度的准确性。 ST_Dwithin速度非常快。

3.1)推出我们自己的解决方案会更好吗? 地狱不!它会受到bug的困扰。