dynamoDB + DAX 如何处理时间序列?

How dynamoDB + DAX work with timeseries?

我想知道 DAX 如何处理时间序列。我想每分钟插入一些数据,添加 TTL 以在 14 天后将其删除,并在每次插入后获取最后 3 小时的数据:

3 小时是 180 分钟,所以大部分时间我需要最后 180 个项目。有时一段时间没有数据,所以可能少于 180 项。

所以 14 天有 20,160 项±19MB 的数据。每分钟获取最近 3 小时的数据时,我将使用多少 DAX?是 19MB 还是 180KB?

let params = {
    TableName: 'prod_server_data',
    KeyConditionExpression: 's = :server_id and t between :time_from and :time_to',
    ExpressionAttributeValues: {
      ':server_id': serverId, // string
      ':time_from': from,     // timestamp
      ':time_to': to,         // timestamp
    },
    ReturnConsumedCapacity: 'TOTAL',
    ScanIndexForward: false,
    Limit: 1440, // 24h*60 = 1440. 1 check every 1 min
  };

  const queryResult = await dynamo.query(params).promise();

DAX caches items and queries separately,查询缓存存储整个响应,以参数为键。在这种情况下,将查询 TTL 设置为 1 分钟,并确保 :time_from 和 :time_to 只有 1 分钟分辨率。

如果您每分钟只调用一次查询,那么您不会从 DAX 中看到太多好处(因为它每次都必须转到 DynamoDB 进行刷新)。

如果您每分钟多次调用查询但只希望数据每分钟更新一次(即重复刷新仪表板),则每分钟只会调用 1 次 DynamoDB 进行刷新,所有其他请求将从缓存。