我试图从非常大的数据库(每月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从指定日期获取单个最新文档,但我还无法找到它。
你有什么想法吗?
答案 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;