假设每次应用程序加载时(初始屏幕),都必须按日期范围查询大块项目。
解决方案1:
创建一个分区键dateManifest
,并将所有日期(2019-01-25
)存储为排序键。这将允许单个查询获取UI所需的所有项目。问题显然是在每次启动应用程序时都会击中该分区键。
解决方案2:
使用写分片来拆分分区键,例如按月份(dateManifestJan
,dateManifestFeb
,dateManifestMar
,...)。这将需要多个查询来填充UI,但它将查询分散到多个分区中。
我的问题:
如果默认查询(在应用程序启动时填充UI)是检索整个年份,那么将分区键拆分起来真的有好处吗?因为您不必在每个查询(dateManifest
)上命中单个分区键,而是在每个查询上都命中相同的12个键。并且您已经创建了这样一种情况,每个分区现在具有较低的RCU限制,因为可能会有更多的分区。
此外,如果查询仅用于一个月,则在1月,您将重载dateManifestJan
分区键,在2月,您将重载dateManifestFeb
键,依此类推。真的更好吗?
答案 0 :(得分:0)
需要更多信息...数据量,可读写
您是否还要拥有多个分区?无论您使用多少个分区键,Dynamo仅在您的数据大于10GB或您提供3000个以上RCU和/或1000个WCU时创建多个分区。
因此,如果您的数据为100GB,则将有10个分区,最多可提供30,000个RCU和10,000个WCU。
如果您担心重复阅读查询,请考虑DynamoDb Accelerator (DAX).
DAX的用例之一是
读取密集但对成本敏感的应用程序。使用DynamoDB,您可以配置应用程序每秒需要的读取次数。如果读取活动增加,则可以增加表的预配置读取吞吐量(需要支付额外费用)。另外,您可以将活动从应用程序转移到DAX群集,并减少否则需要购买的读取容量单位的数量。