Join RejectionDB—优化进行地理定位、连接和分组的查询
在我的应用程序中,我有两个表:一个用于用户(带有地理空间索引“location”),另一个用于用户收到的分数(关于“userid”的二级索引) 我正试图设计一个查询,为距离特定地理位置最近的25个用户提取最新分数。见下文: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" 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})