【发布时间】:2014-05-21 05:13:56
【问题描述】:
我有两个 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”。
由于它们不在同一个数据库中,我正在寻求有关使这种查询高效且干净的算法的帮助。
【问题讨论】:
-
您是否使用 ActiveRecord 来查询您的数据库?
-
是的,我正在使用 ActiveRecord。虽然我不确定这是否相关。服务通过 HTTP/JSON 连接。
-
@jwadsack 我想这个 SO 答案可能会有所帮助,stackoverflow.com/questions/2186682/…
-
@jwadsack 其他冗长的选项可以是使用基于条件的迭代和联合合并来自两个数据库的合并 AR 集合。
-
@AlokAnand 您指向的 SO 答案涉及可以读取两个数据库的 Access。我们的数据集是数百万条记录,我们需要 100 页(通常只有第一条)。访问不是一种选择。我们可以使用现有的数据库(两种情况下都是 PostgreSQL),但这违反了我们的 SOA 分离。合并 ruby 中的记录也是可能的(SOA 接口没有 AR 连接器,但是,我再次认为这不相关。)基于其他数据处理代码,我也不认为这对于数据集的规模。
标签: ruby sorting pagination