【问题标题】:Storing timeseries data in DynamoDB在 DynamoDB 中存储时间序列数据
【发布时间】:2016-10-31 11:44:29
【问题描述】:

我正在尝试在 DynamoDB 中存储一堆网络测量值,但我不确定正确的分区键和范围键。我的数据将如下所示:

{
count: 33,
total: 45,
timestamp: 21231133,
data: {
    key1: value1,
    key2: value2,
    key3: value3,
    key4: value4,
    key5: value5}
}

我需要能够检索时间戳介于时间戳 1 和时间戳 2 之间的数据。我将每秒存储一次数据,并以较慢的间隔(可能每 30 秒)检索一次。

我需要避免热分区并且仍然能够快速查询数据。我不想进行表扫描。

谢谢,

【问题讨论】:

  • 我已经不再为这个应用程序使用 DynamoDB。
  • 将数据源保留为主键,时间戳(如果您每秒获取大量数据,则以纳秒为单位)作为 SortKey,这将允许您根据每个设备独立查询数据。如果用例也是获取时间范围之间的所有数据,您可以在定义设备类型的属性上使用 GSI,您可以查询 [for type-x give me data between StartTime to Endtime] .所以每个数据包都会有 DeviceID(主键)、Timestamp(SortKey)、DataType(GSIPK),并使用 Timestamp 作为 GSISK

标签: amazon-web-services amazon-dynamodb nosql


【解决方案1】:

根据问题中提到的查询模式,我认为“时间戳”属性应该是一个 PARTITION 键。将属性定义为 String 、 Number 或 Binary 时,可以使用 BETWEEN 运算符。

在此表数据上,我看不到任何可用作 RANGE 键的属性,除非您有任何其他查询模式或用例。

BETWEEN : 大于或等于第一个值,小于或 等于第二个值。 AttributeValueList 必须包含两个 相同类型的 AttributeValue 元素,可以是 String、Number 或 二进制(不是集合类型)。目标属性匹配,如果目标 值大于或等于第一个元素并且小于, 或等于第二个元素。如果一个项目包含一个 AttributeValue 与请求中提供的元素类型不同的元素, 值不匹配。例如,{"S":"6"} 不与 {“N”:“6”}。此外, {"N":"6"} 不能与 {"NS":["6", "2", "1"]}

比较

【讨论】:

猜你喜欢
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2014-08-03
  • 2023-04-01
  • 2018-07-19
  • 1970-01-01
相关资源
最近更新 更多