我正在创建一个DynamoDB表,以支持Alexa技能用作播客播放器。我设想表的方式是使用剧集编号作为分区键,将PublicationDate用作可选的排序键。我有两个关于以这种方式设计我的表模式的担忧。
首先,我想查询表格以获取最新一集 - 我不确定我是否可以这样做,因为查询需要在分区键上进行等效操作(episode = X) ,我事先不知道。如果播客有大量剧集(比如超过1000集),我是否相信扫描会是一项非常昂贵的操作?
我需要查看表格中的每个项目,将其剧集编号(分区键值)与之前返回的项目进行比较,并在每次找到一个项目时使用更新的项目更新变量,直到表格中的所有项目为以这种方式循环。
其次,DynamoDB最佳实践说两件事在我的用例中不一致(可能表明我的设计存在缺陷)。首先,分区键应该是唯一的或接近唯一的。其次,应该期望查询或多或少地均匀地分散在密钥中。但就我而言,虽然分区密钥确实是唯一的,但我希望绝大多数查询都是针对表中最新的分区密钥,包含最新播客集数据的项目。例如,如果技能在任何特定日期获得1000个查询都针对单个分区键,那么对性能的影响会是什么?
有没有人为这类数据提供更好的表架构解决方案?
提前感谢大家!
答案 0 :(得分:3)
首先,我想查询表格以获取最新一集 - 我是 不知道我能以这种方式做到这一点,因为查询需要一个 分区键上的等价操作(episode = X),我 事先不知道。我相信扫描会正确吗? 如果播客有很多,那么这是一个非常昂贵的操作 剧集(比如超过1000集)?
你是对的,因为每集都在他们自己的分区中,你无法查询最新的剧集。分区几乎就像不同的隔离表一样,因此无法在没有扫描的情况下查询所有分区(正如您所说)。
其次,DynamoDB最佳实践说两件有用的东西 在我的用例中不一致(可能是我设计的标志) 有缺陷)。首先,分区键应该是唯一的或接近唯一的。 其次,应该或多或少地统一查询 分散在钥匙中。在我的情况下,虽然,分区 关键确实是独特的,我期望绝大多数 查询将定位到表中的最新分区键,用于 包含最新播客节目数据的项目。会是什么 例如,如果技能获得1000个查询,则对性能的影响 在任何一天都针对一个分区密钥?
这里的问题有两个方面,AWS希望你能够平等地读取(和写入)每个分区(或接近均等),所以基本上会发生什么,你将支付写入单位(和读取单位) )即使你没有使用它们,你也不会使用它们。
究竟要运行多少将取决于您查询数据库的次数,但 阅读 比写入和1000次读取基本上没有1000个项目的表。即。你可能能够逃脱它,但它并不理想。