从两个未连接的数据集中获取前N个记录

时间:2014-04-02 04:14:57

标签: ruby sorting pagination

我有两个Rails服务从不同的数据库返回数据。在一个数据集中,我的记录包含如下字段:

query, clicks, impressions

在第二部分,我的字段记录如下:

query, clicks, visitors

我希望能够做的是从合并集中获取分页数据,匹配查询。但它还需要包含一个或另一个数据集中存在的所有记录,然后按“点击”列对它们进行排序。

在SQL中,如果这两个表位于同一个数据库中,我会这样做:

SELECT COALESCE(a.query, b.query), a.clicks, b.clicks, impressions, visitors 
FROM a OUTER JOIN b ON a.query = b.query 
LIMIT 100 OFFSET 1 
ORDER BY MAX(a.clicks, b.clicks)

每个数据集的单个“前100名”会产生不正确的结果,因为数据集“a”中的“点击次数”可能明显高于或低于数据集“b”。

由于它们不在同一个数据库中,我正在寻找有助于使这种查询高效和清洁的算法的帮助。

1 个答案:

答案 0 :(得分:0)

我从来没有找到过在数据库之外执行此操作的方法。最后,我们只使用PostgreSQL的Foreign Data Wrapper功能将两个数据库连接在一起,并使用PostgreSQL处理排序和分页。

对于任何前进这条路径的人来说,我们在远程服务器上构建了VIEW,提供了上面a所需的数据。这比尝试通过远程连接连接表快几千倍,因为索引的值丢失了。