DynamoDB 中分区和排序键查询的渐近性能是不是为常数 O(1)?

Posted

技术标签:

【中文标题】DynamoDB 中分区和排序键查询的渐近性能是不是为常数 O(1)?【英文标题】:Is the asymptotic performance of a partition and sort key query in DynamoDB constant, O(1)?DynamoDB 中分区和排序键查询的渐近性能是否为常数 O(1)? 【发布时间】:2016-10-28 17:03:06 【问题描述】:

例子

以https://www.amazon.com/Amazon-DynamoDB-Developer-Guide-Services-ebook/dp/B007Q4JGBM 中的Music 表为例。此表有分区键Artist 和排序键SongTitle

问题

如果我查询特定艺术家的特定歌曲,性能是 O(1),还是取决于该艺术家在数据库中的条目数?

先前的研究

链接的文档表明性能稳定:

您可以立即访问音乐表中的任何项目,如果您提供 该项目的 Artist 和 SongTitle 值。

但是,措辞模棱两可,没有给出支持。

在这里,架构的描述表明性能不会保持不变:

DynamoDB 使用分区键值作为内部哈希函数的输入。哈希函数的输出决定了存储项目的分区(DynamoDB 内部的物理存储)。具有相同分区键的所有项目存储在一起,按排序键值排序。

我希望这会导致 O(lg m) 性能,其中 m 是该特定分区键的数据库中的条目数。这个非常量的时间对于在已排序的条目列表中搜索具有正确排序键的条目是必要的——在这种情况下,搜索正确的SongTitle

谢谢!

【问题讨论】:

【参考方案1】:

如果您通过其完整主键get 一个项目 - 它是不变的。

如果您通过Artist 查询,这意味着您没有提供完整的主键,那么获取指向第一项的指针是常量

【讨论】:

我不确定这是否属实。证明? 哪一部分让你烦恼? 证明,比如一些官方文档?例如,对于给定的分区键和排序键,我假设 DDB 需要 O(lg m),正如所估计的那样,query 如果您提供分区+排序,则可以在恒定时间内检索每个元素。如果您想查询多个元素,因此只提供分区键,您将获得结果并受到 API 限制,例如大小为 1MB。 再一次,我的问题还是一样。您能否指出一些官方文档“如果您提供分区+排序,则可以在恒定时间内检索每个元素”?

以上是关于DynamoDB 中分区和排序键查询的渐近性能是不是为常数 O(1)?的主要内容,如果未能解决你的问题,请参考以下文章

使用二级索引改进数据访问DynamoDB

AppSync $util.autoId() 和 DynamoDB 分区和排序键设计问题

使用全局二级索引的 DynamoDB 表查询项

AWS Dynamodb,排序键

使用主键和排序键上的两个条件查询表

如何为 DynamoDB 创建 GraphQL 查询