NoSQL:从表DynamoDB/Azure表存储中获取最新值

use*_*701 24 nosql azure-table-storage amazon-dynamodb

我有一个小问题,需要一些建议:

  • 假设我们有几百个数据表,每个表有几十万行.
  • 数据表是时间戳(键) - 值
  • 数据表每秒写入一次

每个表的最新条目应该可以快速获得,并且最有可能被查询最多(有点像"实时跟踪数据").由于缺少'Last()'或类似,我正在考虑创建另一个表"LatestValues",其中更新每个数据表的最新条目以便更快地检索.但是,这会为每个写操作添加额外的更新.此外,大部分流量都集中在这张桌子上(好/坏?).有没有更好的解决方案,或者我错过了什么?

另外,假设我们要查询数据表中的值.由于扫描显然是不可能的,因此通过复制数据来创建二级索引是唯一的选择,有效地使存储要求和写入操作量增加一倍吗?还有其他方法吗?

我主要关注的是DynamoDB和Azure Table Storage,但我也很好奇BigTable如何处理这个问题.

yad*_*taf 36

我今天刚刚发表了一篇文章,其中包含一些关于DynamoDB的常见"食谱".其中一个是"存储文章修订,总是最新的"我认为它可能会让你感兴趣:)

简而言之,您可以使用最新的项目 Query(hash_key=..., ScanIndexForward=True, limit=1)

但是,这假设您有一个range_key_defined.

有了Scan,你没有这样的参数ScanIndexForward=false,无论如何,你不能依赖订单,因为数据分布在分区上,Scan然后请求负载平衡.

要使用DynamoDB实现目标,您可以通过以下方式"拆分"时间戳:

  1. hash_key:约会
  2. range_key:时间或完整时间戳,如您所愿

然后,你可以使用Query+ Limit=1+ 的'技巧'ScanIndexForward=false

  • 只是抬头:在我的情况下,我需要`ScanIndexForward = False`而不是'True`.在撰写文章后的某个时刻,默认行为可能已更改.[`query`方法]的文档(http://boto3.readthedocs.org/en/latest/reference/services/dynamodb.html#DynamoDB.Table.query)读取:_如果ScanIndexForward为true,DynamoDB返回结果按顺序,按范围键.这是默认行为.如果ScanIndexForward为false,DynamoDB按范围键按降序对结果进行排序,然后将结果返回给客户端._ (4认同)
  • 您在此处的链接似乎已过期。我在 https://blog.yadutaf.fr/2012/10/07/common-dynamodb-questionsmisconceptionsrecipes/ 上发现了可能相同的内容 (2认同)