Join RejectionDB—优化进行地理定位、连接和分组的查询

Join RejectionDB—优化进行地理定位、连接和分组的查询,join,geolocation,geospatial,rethinkdb,Join,Geolocation,Geospatial,Rethinkdb,在我的应用程序中,我有两个表:一个用于用户(带有地理空间索引“location”),另一个用于用户收到的分数(关于“userid”的二级索引) 我正试图设计一个查询,为距离特定地理位置最近的25个用户提取最新分数。见下文: // "location" is a variable that holds r.point(lon, lat) r .table('users') .getNearest(location, {index: 'location', maxDist: 500})

在我的应用程序中,我有两个表:一个用于用户(带有地理空间索引“location”),另一个用于用户收到的分数(关于“userid”的二级索引)

我正试图设计一个查询,为距离特定地理位置最近的25个用户提取最新分数。见下文:

// "location" is a variable that holds r.point(lon, lat)
r
  .table('users')
  .getNearest(location, {index: 'location', maxDist: 500})
  .limit(25)
  .eqJoin(
    r.row('doc')('id'), // the getNearest returns original data inside "doc" object
    r.table('scores'),
    {index: 'userid'})
  .zip()
  .group('userid')
  .max('scoredate')
现在,我在用户表中有大约40k个用户,在分数表中有大约100k个分数。此操作的平均查询时间为50ms-100ms,我正在尽可能地改进这一点


有人能帮我优化这个查询吗?我想让它尽可能快,因为用户/分数表在不断增长。

这看起来是我能想到的查询的最快版本。如果50-100ms太高,您可能只需要更快的硬件。如果现在速度很好,但您担心将来速度会变慢,我不会太担心,因为这两个操作都被索引了,所以它应该可以很好地扩展。

一个小优化是通过将
maxResults:25
optarg添加到
getNearest
.getNearest>来替换
限制(25)
(位置,{index:'location',maxDist:500,maxResults:25})