重新考虑DB查询使用二级索引来处理unix时间戳值范围

时间:2019-02-20 04:41:42

标签: rethinkdb

我想查询或过滤特定的访问日志以获取unix时间戳(开始和结束)。但是,使用下面的普通过滤器将永远需要查询。 该表中有超过1M条记录。

此外,还有一个二级索引unixTimestamp,我想使用它,这样它会快很多。我的问题是如何使用该二级索引unixTimestamp并执行如下所示的查询?

重新考虑查询:

r.db("my_db")
  .table("my_access_log")
  .filter(
    function(accessLog) {
      return accessLog("unixTimestamp").ge(1550660220)
        .and(accessLog("unixTimestamp").le(1550663580));
    }
  )

样本数据(访问日志):

{
    "access":  "Granted" ,
    "createdDateS":  "2019-02-19T18:17:01" ,
    "id":  "abc123" ,
    "sn":  "123413523523" ,
    "unixTimestamp": 1550563149 ,
    "user": dummyuser@dummies.com, »
}

谢谢!

1 个答案:

答案 0 :(得分:1)

很抱歉,我要尽快发布答案,我需要尽快找到答案,然后才发现自己...我只是将其发布,以防万一有人遇到相同的问题。

r.db("my_db")
  .table("my_access_log")
    .between(1550660220, 1550663580, {"index": "unixTimestamp"})
      .orderBy({index: r.desc('unixTimestamp')})

这是在Unix时间戳unixTimestamp1550660220 (start)之间使用辅助索引1550663580 (end)进行搜索。然后按unixTimestamp字段的降序对结果进行排序。

如果您需要按日期进行过滤...只需替换between(start, end)值即可。

有了这个,如果我的表有将近200万条记录,那么我将不使用二级索引就可以立即比较记录。

希望这会有所帮助!