如何解决在dynamodb中查询VS扫描操作
背景
我目前正在尝试根据我拥有的数据库设计找出在lambda函数中计算某些统计信息的最佳方法。假设我有一个来自中国的用户记录,我将我存储在一个阵列中的23个省中,我要确定这些用户中男女的总数,以及每个省的用户数。
给出一个GSI表,其中包含200,000个项目,每个项目的总大小为100字节,如下所示,而Province属性是分区键。
{
"createdAt": {
"S": "2020-08-05T19:21:07.532Z"
},"gender": {
"S": "Male"
},"updatedAt": {
"S": "2020-08-05T19:21:07.532Z"
},"province": {
"S": "Heilongjiang"
}
}
我正在考虑使用两种方法进行计算:
1. 查询方法
我计划循环遍历Province数组,并在每个循环上向查询方法提供一个分区键,这最终将导致发出过多请求(准确地说,这是23个,即返回的每个请求未超过的限制) 1MB,这可能会使我不断重复,直到当前查询没有更多的lastEvaluationKey为止。
2. 扫描方法
在这种方法中,我将反复向数据库发出请求,直到不再有lastEvaluationKey。
是否了解扫描和查询方法都只能返回1mb的数据,在这种特定用例中哪种方法最合适?
我正在考虑使用扫描方法,因为无论如何我都需要读取表中的所有数据以计算统计信息;但是,我担心表增长时操作将变得多么缓慢。
PS:建议使用其他keySchema以获得更好的访问。
解决方法
都不是。
在DDB表中创建,更新/删除记录时,请使用DDB流+ Lambda更新统计信息。
另请参阅
Using Global Secondary Indexes for Materialized Aggregation Queries
How to do basic aggregation with DynamoDB?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。