dynamodb 中的查询与扫描操作
Query Vs Scan operation in dynamodb
背景
我目前正在尝试根据我拥有的数据库设计找出计算 lambda 函数中某些统计信息的最佳方法。假设我有来自中国的用户记录,其中有 23 个省份,我存储在一个数组中,我想确定女性和男性的总数,以及每个省份的用户数。
假设 GSI table 有 200,000 个项目,每个项目的总大小为 100 字节,如下所示,省属性是分区键。
{
"createdAt": {
"S": "2020-08-05T19:21:07.532Z"
},
"gender": {
"S": "Male"
},
"updatedAt": {
"S": "2020-08-05T19:21:07.532Z"
},
"province": {
"S": "Heilongjiang"
}
}
我正在考虑使用两种方法进行此计算:
1.查询方式
我计划循环遍历省数组并在每个循环中为查询方法提供一个分区键,这最终会发出太多请求(准确地说是 23,如果每个请求 returned没有超过 1MB 的限制,这可能会导致我不断重复,直到当前查询没有更多的 lastEvaluationKey。
2.扫描方式
在这种方法中,我会反复向数据库发出请求,直到没有更多的 lastEvaluationKey。
了解扫描和查询方法都能够 return 只有 1mb 的数据,哪种方法最适合在这个特定的用例中使用?
我正在考虑采用扫描方法,因为无论如何我都需要读取 table 中的所有数据才能计算统计信息;但是,我担心 table 增长时操作会变得多慢。
PS:对于不同的 keySchema 以更好地访问的建议也将不胜感激。
都没有。
使用 DDB Streams + Lambda 更新您的统计数据,因为记录在您的 DDB table.
中 created/updated/deleted
另见
Using Global Secondary Indexes for Materialized Aggregation Queries
How to do basic aggregation with DynamoDB?
背景
我目前正在尝试根据我拥有的数据库设计找出计算 lambda 函数中某些统计信息的最佳方法。假设我有来自中国的用户记录,其中有 23 个省份,我存储在一个数组中,我想确定女性和男性的总数,以及每个省份的用户数。
假设 GSI table 有 200,000 个项目,每个项目的总大小为 100 字节,如下所示,省属性是分区键。
{
"createdAt": {
"S": "2020-08-05T19:21:07.532Z"
},
"gender": {
"S": "Male"
},
"updatedAt": {
"S": "2020-08-05T19:21:07.532Z"
},
"province": {
"S": "Heilongjiang"
}
}
我正在考虑使用两种方法进行此计算:
1.查询方式
我计划循环遍历省数组并在每个循环中为查询方法提供一个分区键,这最终会发出太多请求(准确地说是 23,如果每个请求 returned没有超过 1MB 的限制,这可能会导致我不断重复,直到当前查询没有更多的 lastEvaluationKey。
2.扫描方式
在这种方法中,我会反复向数据库发出请求,直到没有更多的 lastEvaluationKey。
了解扫描和查询方法都能够 return 只有 1mb 的数据,哪种方法最适合在这个特定的用例中使用?
我正在考虑采用扫描方法,因为无论如何我都需要读取 table 中的所有数据才能计算统计信息;但是,我担心 table 增长时操作会变得多慢。
PS:对于不同的 keySchema 以更好地访问的建议也将不胜感激。
都没有。
使用 DDB Streams + Lambda 更新您的统计数据,因为记录在您的 DDB table.
中 created/updated/deleted另见
Using Global Secondary Indexes for Materialized Aggregation Queries
How to do basic aggregation with DynamoDB?