如何从特定日期获取最新文件?
How to get latest document from specific date?
我正在尝试从 Couchbase 和 N1QL 中的指定日期(变量)获取最新的文档(在一个非常大的数据库中(每个月 1.5 亿份文件)。某个日期的最新文档可以是任何时间(前一秒或上个月)。请注意,日期是在 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 从指定日期获取单个最新文档的有效方法,但我还找不到它。
你有什么想法吗?
创建负函数索引并像下面这样更改查询在 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;
我正在尝试从 Couchbase 和 N1QL 中的指定日期(变量)获取最新的文档(在一个非常大的数据库中(每个月 1.5 亿份文件)。某个日期的最新文档可以是任何时间(前一秒或上个月)。请注意,日期是在 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 从指定日期获取单个最新文档的有效方法,但我还找不到它。
你有什么想法吗?
创建负函数索引并像下面这样更改查询在 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;