javascript - 发电机 : Query only every 10th value

标签 javascript database nosql aws-lambda amazon-dynamodb

我正在查询两个特定 unixtime 值之间的数据。例如:

1516338730(今天6:12)到1516358930(今天11:48)之间的所有数据

我的数据库每分钟收到一条新记录。现在,当我想查询最近 24 小时的数据时,它太密集了。每 10 分钟一次就完美了。

我现在的问题是:如何使用 DynamoDB 读取每 10 条数据库记录

据我所知,无法使用模数或类似的东西来满足我的需要。

到目前为止,这是我的 AWS Lambda 代码:

  var read = {
    TableName: "user",
    ProjectionExpression:"#time, #val",
    KeyConditionExpression: "Id = :id and TIME between :time_1 and :time_2",
    ExpressionAttributeNames:{
        "#time": "TIME",
        "#val": "user_data"
    },
    ExpressionAttributeValues: { 
      ":id": event, // primary key 
      ":time_1": 1516338730,
      ":time_2": 1516358930
    },
    ScanIndexForward: true
  };
  docClient.query(read, function(err, data) {
    if(err) {
      callback(err, null);
    }
    else {
      callback(null, data.Items);
    }
  });
};

最佳答案

你说你每分钟插入1条记录?

以下可能是一个选项:

在插入的时候,在记录上设置另一个字段,我们称之为MinuteBucket,它被计算为时间戳的分钟值模10

如果您通过流函数执行此操作,则可以处理新记录,然后编写一些内容来触及旧记录以强制进行计算。

您的查询将更改为:

/*...snip...*/
KeyConditionExpression: "Id = :id and TIME between :time_1 and :time_2 and MinuteBucket = :bucket_id",
/*...snip...*/
ExpressionAttributeValues: { 
  ":id": event, // primary key 
  ":time_1": 1516338730,
  ":time_2": 1516358930,
  ":bucket_id": 0 //can be 0-9, if you want the first record to be closer to time_1, then set this to :time_1 minute value mod 10
},
/*...snip...*/

作为后续想法:如果您想加快查询速度,也许可以研究在索引中使用 MinuteBucket,尽管这可能会付出更高的代价。

关于javascript - 发电机 : Query only every 10th value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339685/

相关文章:

javascript - 单击我的提交按钮时自动滚动

sql - 返回数组的 unnest() 子查询?

mysql - 使用相同的表更新表中的各个 ID 的列。

数据库与纯文本

cassandra - 如何使用 Java 在 Cassandra 中检索表名?

javascript - 计算通过 Canvas 高度的 float 对象

javascript - TR中选中和取消选中复选框的最佳方法

javascript - 为什么这些调用按它们发生的顺序发生?

mongodb - 用于过滤多个索引/字段的最佳 NoSQL

c# - 在 RavenDB LINQ 查询中使用日期字段比较