database - 扫描大型 DynamoDB 表 - 1.5TB 大小,包含 100 亿条记录
问题描述
背景
我需要扫描一个相当大的 DynamoDB 表,并且正在寻找优化扫描速度的方法。我试过运行一个简单的扫描查询,即使运行了一天,扫描也没有完成。该表1.5TB
的大小与10 Billion
记录有关,平均记录大小为0.15KB
细节
PrimaryKey: "{userId}:{barcode}"
SortKey: "{epochTimeInMillis}"
在我们的用例中,我们只能访问 ,userId
我们必须扫描表以查找 userId 在PrimaryKey
.
问题
关于加快 ScanTime 的请求我可以尝试什么的任何想法?现在,我设置了 30K 读取容量单位,但在扫描运行时,我只看到大约 1500 个 RCU 被使用,所以我认为这不是问题。
最好的,
解决方案
我不知道有什么方法可以加快 DDB Scan() ..(编辑duh ...来自 F_SO_K 的答案使用并行扫描)
虽然我不认为 100 亿行需要超过一天的时间。(编辑是的,实际上需要一天半的时间来分批读取 1.5TB,每批 1MB 85ms 响应时间)
如果这是您预计不止一次做的事情,我会设置一个 GSI,将其userId
作为散列键,并将其他东西作为排序键。也许barcode:epochTimeInMillis
老实说,我会考虑userId
作为我表的哈希键......用户真的有多个条形码吗?或者条形码不是用户独有的?
编辑
我可以理解不想为您不经常需要的 GSI 付费……但在存储方面,1.5TB 仅为 375 美元/月左右(美国东部)。而你假设整个记录都被复制了。您希望 WCU 与表匹配,但 RCU 可能是 1 或 2,如果需要,只需在您实际需要使用它的日子将其提高。
推荐阅读
- javascript - 在 JS 中使用可选的 java 变量
- python - 如何在 macOS Catalina 的 VS Code 中使用 pip install 安装依赖项
- android-studio - 詹金斯可以显示失败构建\成功构建的数量吗?
- javascript - 如何在 JavaScript 中进行模块论证?
- javascript - 如何在 reudx 中使用 mapdispatchtostate?
- amazon-web-services - 使用 step 函数运行多个 fargate 任务
- reactjs - 反应引导:导航栏最后一项右手定位
- mysql - 带有多个 IF 语句的 MySQL 触发器
- extentreports - 如何通过删除不需要的图形和额外空间来自定义范围报告
- javascript - 在 'Node' 上执行 'insertBefore' 失败:此节点类型不支持此方法