dynamoDB + DAX 如何处理时间序列?
How dynamoDB + DAX work with timeseries?
我想知道 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();
DAX caches items and queries separately,查询缓存存储整个响应,以参数为键。在这种情况下,将查询 TTL 设置为 1 分钟,并确保 :time_from 和 :time_to 只有 1 分钟分辨率。
如果您每分钟只调用一次查询,那么您不会从 DAX 中看到太多好处(因为它每次都必须转到 DynamoDB 进行刷新)。
如果您每分钟多次调用查询但只希望数据每分钟更新一次(即重复刷新仪表板),则每分钟只会调用 1 次 DynamoDB 进行刷新,所有其他请求将从缓存。
我想知道 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();
DAX caches items and queries separately,查询缓存存储整个响应,以参数为键。在这种情况下,将查询 TTL 设置为 1 分钟,并确保 :time_from 和 :time_to 只有 1 分钟分辨率。
如果您每分钟只调用一次查询,那么您不会从 DAX 中看到太多好处(因为它每次都必须转到 DynamoDB 进行刷新)。
如果您每分钟多次调用查询但只希望数据每分钟更新一次(即重复刷新仪表板),则每分钟只会调用 1 次 DynamoDB 进行刷新,所有其他请求将从缓存。