jQg*_*uru 14 time-series amazon-web-services amazon-dynamodb
我想在亚马逊的DynamoDb数据库中存储1M +不同的时间序列.每个时间序列将有大约50K数据点.数据点由时间戳和值组成.
应用程序将频繁地(始终)向时间序列添加新数据点,并将不时检索(通常是整个时间序列)时间序列,以进行分析.
我该如何构建数据库?我应该为每个时间序列创建一个单独的表吗?或者我应该将所有数据点放在一个表中?
Cor*_*all 14
假设您的数据是不可变的并且给定大小,您可能需要考虑Amazon Redshift ; 它是为PB级报告解决方案编写的.
在Dynamo中,我可以想到一些可行的设计.在第一个中,您可以使用一个表,使用复合散列/范围键(两个字符串).哈希键是时间序列名称,范围键是时间戳作为ISO8601字符串(具有令人愉快的属性,字母顺序也是按时间顺序排列),并且每个项目都有一个额外的属性; 一个值'.这使您可以从时间序列(查询hashKey相等)和时间序列的子集(查询hashKey相等和rangeKey BETWEEN子句)中选择所有内容.但是,您的主要问题是"热点"问题:在内部,Dynamo将通过hashKey对您的数据进行分区,并将您的ProvisionedReadCapacity分散到所有分区上.因此,您可能每秒有1000 KB的读取,但如果您有100个分区,那么每个分区每秒只有10 KB,并且从单个时间序列中读取所有数据(单个hashKey)将只访问一个分区.因此,您可能认为1000 KB的读取时间为1 MB,但如果存储10 MB,则可能需要更长时间才能读取它,因为您的单个分区会对您造成更大的压力.
从好的方面来说,DynamoDB在扩展方面具有极高但昂贵的上限; 如果您需要,您可以支付100,000个读取容量单位,并且对所有这些数据都有亚秒级的响应时间.
另一个理论设计是将每个时间序列存储在一个单独的表中,但我不认为DynamoDB可以扩展到数百万个表,所以这可能是不行的.
您可以尝试在10个表中分散您的时间序列,其中"高度读取"数据在表1中,"几乎从不读取数据"在表10中,而所有其他数据在其间的某处.这将让您"游戏"配置的吞吐量/分区限制规则,但在您的设计中具有高度复杂性.总的来说,它可能不值得; 你在哪里新的时间序列?你怎么记得他们都在哪里?你如何移动时间序列?
我认为DynamoDB支持从我自己的经验中对这些类型的读取进行内部"爆破",并且我的数字可能已关闭,并且您将获得非常好的性能.不过,我的判决是调查Redshift.
归档时间: |
|
查看次数: |
13079 次 |
最近记录: |