如何从特定日期获取最新文档?

时间:2017-08-19 23:07:47

标签: couchbase n1ql

我试图从非常大的数据库(每月1.5亿个文档)中的 Couchbase N1QL 中的指定日期(变量)获取最新文档。日期的最新文件可以是任何时间(前一个月或上个月)。注意,日期是在Unix Epoch中。这是文件的结构:

{
  "type" : "person",
  "id":"001",
  "name":"John Doe",
  "date":"1491199810.435"
}

我有日期索引:

CREATE INDEX `date` ON `mytable`(`date`) WITH { "defer_build"=true }

通常在我处理的Postgres中,我通常会这样做:

SELECT * WHERE date <="1491199813.000" ORDER BY date DESC LIMIT 1;

Postgres上的日期索引只是以毫秒为单位的响应。

然而, Couchbase ORDER BY ... LIMIT非常慢。在相同的硬件和相同的数据上需要几分钟。

肯定有一种有效的方法可以使用Couchbase N1QL从指定日期获取单个最新文档,但我还无法找到它。

你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

创建负面功能索引并更改下面的查询在5.0.0之前

CREATE INDEX `forex_dt` ON `forex`(-TONUMBER(`date`));
SELECT * FROM `forex` WHERE -TONUMBER(`date`) >= -1491199813.000 ORDER BY -TONUMBER(`date`) LIMIT 1;

5.0.0

CREATE INDEX `forex_dt` ON `forex`(`date` DESC);
SELECT * FROM `forex` WHERE `date` <= "1491199813.000" ORDER BY `date` DESC LIMIT 1;