2

我想确保我做对了,
根据我到目前为止所读到的内容,你不能查询 dynamodb 中的一系列主键,
比如你有一个主键,它是你客户的电话号码之类的数字,你不能得到主键大于 3010000000 或介于 3010000000 和 3020000000 之间的项目
,我不是在谈论范围键,我的问题是关于主键本身,

所以如果这是真的,有很多用例,比如日期之间的项目,在某个时间点之后注册的用户,以及......,这需要表扫描,

它是否正确?

编辑:好的,想到的一种解决方案是仅使用一个虚拟 hash_key 作为主键,并将真实键(如上面的电话号码)插入范围键,这行得通吗?

4

2 回答 2

8

是的,您无法hash_key使用 DynamoDb 获得范围。但这并不意味着你被你的用例困住了。

让我们以“日期”用例为例,假设您正在构建一个日志记录应用程序。您每天可能会获得大量记录。

如果您使用日期作为 hash_key,您可以将完整的时间戳作为 range_key。这样,您可以将查询拆分为块并获得所需的内容。

当然,要获得最佳结果,您需要充分了解查询的类型。例如,典型范围是多少?使用 DynamoDb 以及其他 key:value 存储,您大多数时候在建模数据时考虑到查询,这与在建模时只考虑数据的 SQL 不同。

当然,如果您的物品跨越更大/更短的范围,只需调整此系统即可。

关于“所有人都在同一个假人下hash_key”听起来是个糟糕的主意。对不起。我不是百分百确定它是如何工作的,但我知道 DynamoDB 会跨所谓的分区进行一些分片。我相信1 hash_key <=> 1 partitions。此外,如果仔细阅读文档,您会注意到预置吞吐量在分区之间平均分配,因此每个分区只分配了您所支付费用的一小部分。

于 2012-10-17T19:59:23.120 回答
0

在不修改主 DynamoDB 表的键的情况下,您可以添加具有恒定分区键的 GSI,并将主表的分区键作为其排序键。

这将使您能够查询索引的排序键并使用生成的分区键来获取您要查找的数据。

于 2021-11-17T06:42:17.857 回答