1

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

  • 每分钟插入 1KB
  • 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();
4

1 回答 1

1

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

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

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

于 2018-07-16T22:55:27.827 回答