![](/img/trans.png)
[英]how to group AWS dynamodb table and get latest value of partition key using boto3(lambda)?
[英]Lambda with DynamoDB Trigger on a table Partition Key with more than 500000 distinct values
我们目前正在设计一个dynamodb表来存储某些文件属性。 有2个主要栏目
目前,分区键是Date,排序键是FileName。 我们预计每天大约有500000个文件具有不同的文件名(这可能会在一段时间内增加)。 文件名将每天重复相同,即典型的模式如下所示
Date FileName 20190617 abcd.json 20190618 abcd.json
我们有一系列基于Date和dynamodb触发器的查询。 查询工作得很好。 目前我们观察到的是并发lambda执行的数量限制为2,因为我们是按日期分区。 在尝试改善lambda的并发性时,我们遇到了两个解决方案
1)参考以下链接( https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-sharding.html ),一个想法是为Date Field添加固定数量的随机后缀,即(20190617.1到20190617.500)将数据拆分为500个分区,每个分区有1000条记录。 这将确保一定程度的并发性,并且对查询的更改也很少
2)第二个选项是更改表的分区,如下所示:分区键: - FileName和SortKey: - Date。 这将导致大约500000个分区(可以增加)。 对于按日期查询,我们需要添加一个GSI,但我们将在Lambda中实现更多的并发性
我们还没有创建一个包含500000个分区的表(可以增加)。 任何机构都有这样的经历......如果有,请评论
任何帮助表示赞赏
您似乎错误地认为分区键和分区之间存在一对一的对应关系。
不是这种情况。
分区数由表大小和吞吐量驱动。 分区键由DDB进行散列,数据存储在特定分区中。
您可以拥有100k分区密钥,只有一个分区。
如果你正在推动DDB的限制,那么你可能最终只能在一个分区中使用一个分区键...但这不是典型的。
DDB白皮书提供了DDB如何工作的一些细节......
如果您的访问模式是按日期查询,则按文件名分区并没有多大意义。
相反,通过添加后缀来增加每个日期的分区数的想法似乎很好。 但是,您可以考虑根据文件名添加稳定的后缀,而不是添加随机后缀:
你可以使用文件名的第一个字母来获得大约30个分区 - 假设文件名是随机的。 唯一的麻烦是某些字母可能比其他字母更为常见,从而产生偏差的子分区
或者,您可以获取文件名的哈希值,并将其用作分区键的后缀。 散列函数可以是一个相对简单的散列函数,它产生一个目标数值,该值对应于您希望为每个日期分配的子分区数。
如果每个分区最终得到大约10000-50000个项目,那么它可能会很棒。
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.