查询最新项目&在DynamoDB

时间:2018-05-04 13:31:11

标签: performance amazon-web-services database-design amazon-dynamodb alexa-skill

我正在创建一个DynamoDB表,以支持Alexa技能用作播客播放器。我设想表的方式是使用剧集编号作为分区键,将PublicationDate用作可选的排序键。我有两个关于以这种方式设计我的表模式的担忧。

首先,我想查询表格以获取最新一集 - 我不确定我是否可以这样做,因为查询需要在分区键上进行等效操作(episode = X) ,我事先不知道。如果播客有大量剧集(比如超过1000集),我是否相信扫描会是一项非常昂贵的操作?

我需要查看表格中的每个项目,将其剧集编号(分区键值)与之前返回的项目进行比较,并在每次找到一个项目时使用更新的项目更新变量,直到表格中的所有项目为以这种方式循环。

其次,DynamoDB最佳实践说两件事在我的用例中不一致(可能表明我的设计存在缺陷)。首先,分区键​​应该是唯一的或接近唯一的。其次,应该期望查询或多或少地均匀地分散在密钥中。但就我而言,虽然分区密钥确实是唯一的,但我希望绝大多数查询都是针对表中最新的分区密钥,包含最新播客集数据的项目。例如,如果技能在任何特定日期获得1000个查询都针对单个分区键,那么对性能的影响会是什么?

有没有人为这类数据提供更好的表架构解决方案?

提前感谢大家!

1 个答案:

答案 0 :(得分:3)

问题1:

  

首先,我想查询表格以获取最新一集 - 我是   不知道我能以这种方式做到这一点,因为查询需要一个   分区键上的等价操作(episode = X),我   事先不知道。我相信扫描会正确吗?   如果播客有很多,那么这是一个非常昂贵的操作   剧集(比如超过1000集)?

你是对的,因为每集都在他们自己的分区中,你无法查询最新的剧集。分区几乎就像不同的隔离表一样,因此无法在没有扫描的情况下查询所有分区(正如您所说)。

问题2:

  

其次,DynamoDB最佳实践说两件有用的东西   在我的用例中不一致(可能是我设计的标志)   有缺陷)。首先,分区键​​应该是唯一的或接近唯一的。   其次,应该或多或少地统一查询   分散在钥匙中。在我的情况下,虽然,分区   关键确实是独特的,我期望绝大多数   查询将定位到表中的最新分区键,用于   包含最新播客节目数据的项目。会是什么   例如,如果技能获得1000个查询,则对性能的影响   在任何一天都针对一个分区密钥?

这里的问题有两个方面,AWS希望你能够平等地读取(和写入)每个分区(或接近均等),所以基本上会发生什么,你将支付写入单位(和读取单位) )即使你没有使用它们,你也不会使用它们。

究竟要运行多少将取决于您查询数据库的次数,但 阅读 写入和1000次读取基本上没有1000个项目的表。即。你可能能够逃脱它,但它并不理想。

备用表架构/密钥设计

  1. 您还会做出哪些其他查询?即。除了"检查最新剧集"
  2. 每天添加多少播客?周?一年?
  3. 是否有多个节目'或者可以用于分区密钥的类别,这些分区密钥可能具有更均匀的分布并且可以是已知的'?