首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于非主键的AWS DynamoDB查询

基于非主键的AWS DynamoDB查询
EN

Stack Overflow用户
提问于 2017-11-27 22:53:02
回答 3查看 10.9K关注 0票数 5

我是AWS DynamoDB的新手,我想澄清一些事情。是否可以基于非主键属性查询表和筛选器。我的桌子如下所示

存储Id: PrimaryKey名称:简单字符串位置:简单字符串

现在我想问一下我的名字,但我想我也必须根据我所知道的把钥匙给你?除此之外,我可以使用扫描,但我将加载所有的数据。

EN

回答 3

Stack Overflow用户

发布于 2017-11-27 23:14:57

来自文档

查询操作根据主键值查找项。可以查询具有复合主键(分区键和排序键)的任何表或辅助索引。

DynamoDB要求查询始终使用分区键。

就您的情况而言,您的选择是:

  • 创建使用名称作为主键的全局辅助索引
  • 如果表相对较小,或者预期结果集将包含表中的大部分记录,则使用扫描+筛选器
票数 4
EN

Stack Overflow用户

发布于 2017-11-28 05:37:33

在使用DynamoDB时,很少有您可以遵循的设计原则。如果您来自关系背景,您已经看到了来自主键属性的查询限制。

  • 设计表格,用于查询和分离热数据和冷数据。
  • 创建用于查询非键属性的索引(您有两个选项:可以在任何时间定义的全局辅助索引和需要在表创建时指定的本地辅助索引)。

使用全局辅助索引,您可以将任何NonKey属性提升为索引的分区键,并为查询排序键选择另一个属性。对于本地辅助索引,可以将任何非键属性提升为保持相同分区键的排序键。

  • 使用索引进行查询对于提高使用提供的吞吐量的效率也很重要。
  • 尽管索引消耗了表中的读取吞吐量,但它也以这样一种方式节省了读取吞吐量,即如果您预测要读取的属性数量合适,那么它可以在读取中提供巨大的好处。检查下面的示例。

假设您有一个DynamoDB表,其项为40 of。如果直接从表中读取10个项目,它将消耗100个read单元(对于一个项10单元,因为一个单元可以读取4KB并乘以10)。如果您定义了一个索引,仅用于预测列出每个项目将有4KB的属性所需的属性,那么它将只消耗10个Read单元(每个项目一个单元),这在成本方面产生了巨大的差异。

  • 使用DynamoDB,定义索引以优化查询非常重要,不仅是从查询能力上,而且在吞吐量方面也是如此。
票数 2
EN

Stack Overflow用户

发布于 2018-09-24 14:29:11

不能在Dynamo中查询基于非主键的属性.

如果您仍然想要这样做,您可以使用扫描查询,但扫描在DyanmoDB中是昂贵的操作,如果表很大,那么它将影响性能,不建议这样做,因为它将扫描表中的每个项,而AWS会为该查询所扫描的所有项付出代价。

实现这一目标有两种方法。

  1. 将Store作为Dyanmo DB表的PrimaryKey/ Partaion键,并添加名称/位置作为排序键(只有一个作为Dyanmo DB接受一个属性作为排序键。
  2. 创建用于查询非键属性的全局辅助索引,这些属性是您经常需要的。

在Dyanamo DB中创建GSI有3种方法,在您的示例中选择GSI和选项INCLUDE,并在Idex中添加名称、位置和存储ID。

  • KEYS_ONLY -索引中的每个项仅由表分区键和排序键值以及索引键值组成。KEYS_ONLY选项的结果是最小的次要索引。
  • 除了KEYS_ONLY中描述的属性之外,辅助索引还将包括您指定的其他非键属性。
  • ALL -辅助索引包括源表中的所有属性。因为所有的表数据都在索引中重复,所以所有的投影都会产生尽可能大的辅助索引。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47521164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档