【问题标题】:Aws Dynamo Time Series Read DataAws Dynamodb 时间序列读取数据
【发布时间】:2018-02-01 02:39:05
【问题描述】:

什么是建模时间序列数据的最佳方法,需要快速查找单个项目,但写入并不重要。

columns: Time(PK), value

Time 将存储为 Unix timestampvalue 作为 int

我要执行的查询:

  • 给定一个时间戳,在表中找到与该时间戳最接近的时间戳。所以根本不需要扫描。

写入将是周期性的,可能每小时一次。只要写入发生在某个时间点,就可以了。它们将通过 lambda 完成。

战略有什么陷阱吗?

【问题讨论】:

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


    【解决方案1】:

    使用 DynamoDB 和时间序列数据,您最好的选择可能是根据数据点在时间上的分布情况,以有意义的粒度对数据进行分桶。例如,如果您只希望每小时接收一定数量的数据点,那么使用日期+一天中的小时作为分区键并将时间戳作为排序键可能是有意义的。

    如果您的数据在当天的吞吐量非常稀疏,那么分区键可能就是日期本身。

    无论哪种方式,原理都是一样的:将你的时间序列划分为块,并根据实际时间戳对每个块中的数据点进行排序。

    【讨论】:

    • 感谢您的回复。我在想每年都有一张新桌子。时间戳值将按分钟分隔,所以我会每小时或每天结束时写。 2018 年和 2017 年的表将被使用最多,在每个表中我都添加了一个名为 stockName 的新列。我当时的想法是将 stockName+Timestamp(Unix) 作为分区键并对其进行哈希处理。然后排序键作为时间戳。我不确定我是否需要散列,我认为它会提供更好的分区。再次感谢
    • 是的,滚动表有助于优化旧数据和新数据的访问模式。但是,关于分区 - 无论如何您都必须有一个分区键,除非您将所有数据放在同一个分区中(这将很难扩展),否则您需要按小时或按天进行分区,这样您就可以为接近的数据编写有效的查询给定的时间戳。
    • 关于分区,我怀疑我的表在大约 3 年内会超过 10GB,所以分区只会在我达到 3k RCU 时发生,所以我可能会被一个分区卡住一会儿。如果我要对 stockName 进行分区然后按时间戳排序怎么办?我不确定发电机是否有能力,但对于时间戳,如果表中没有它,我可能需要获得最接近的。再次感谢您的帮助,迈克
    • 您当然可以按股票名称进行分区。假设每只股票都有相同数量的数据点,这将是非常统一的。如果您不担心超出预置的读取吞吐量,那么这可能会奏效。如果按股票名称进行分区,则必须为每只股票编写单独的查询。
    • 我目前希望将我的 RCU 设置为 200/300,我相信这在一段时间内应该没问题。由于阅读相对便宜,我不介意超过它,但由于流量而不是由于糟糕的设计,理论上我应该为每只股票拥有相同数量的数据点。为什么这会导致 RCU 超标?
    猜你喜欢
    • 2013-08-15
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2021-11-06
    • 2018-11-06
    • 2021-08-05
    • 2016-10-09
    相关资源
    最近更新 更多