当前位置: 首页 > 知识库问答 >
问题:

DynamoDB:如何获得GSI分区键的唯一值?

何聪
2023-03-14

说在AWS DynamoDB,我有一个表:

ID (Partition key, GSI's Sort Key)   OtherAttribute      Name (GSI's Partition Key)
0                                       1/1/2020                Alice
1                                       2/1/2020                Bob
2                                       3/1/2020                John
3                                       4/1/2020                Alice
4                                       5/1/2020                Bob
5                                       5/1/2020                Michael

我的GSI会投影原始表的所有属性。

现在我想最终得到一组数据结构{“Alice”,“Bob”,“John”,“Michael”}。

我怎样才能做到这一点?似乎扫描操作本身不能选择唯一值,这意味着在我的情况下,扫描操作不能更快,对吗?然后,在我得到一个检索到的所有项目的列表之后,我需要对这个列表进行操作,以提取列Name的唯一值,这是唯一的方法吗?

所以我想我需要扫描整张桌子。另一个问题是,既然我的GSI投影了所有属性,那么扫描GSI还是只扫描原始表会有什么区别?我的目标当然是尽快完成这项工作。

有人能给点建议吗?

谢谢!

共有1个答案

薛华奥
2023-03-14

迪纳摩不支持这种操作。

您可能需要重新考虑DDB的使用。

要在dynamo中高效地实现您想要的功能,唯一的方法是启用streams,并使用Lambda函数更新另一个DDB表或现有表中的另一组行。。。

您只需使用类似于“DISTINCT_NAME”的分区键和排序键:NAME来存储记录。

这基本上是用于物化聚合的相同解决方案

 类似资料:
  • 假设我有一个名为“student_course”的Dynamo DB表。我想存储每个学生在大学学习的课程。一个学生可以一次学习多个课程,一个课程可以一次有多个学生。所以基本上它是一个多映射。 我的数据访问模式只有一个用例- 一次获取一个学生和一门课程的记录,即获取每个学生ID和CourseId组合的数据。它保证对于学生ID和课程ID组合,只有一条记录可用。 为了实现这一点,我可以通过以下两种方式存

  • > 如果对dynamodb表执行“get_item”操作,则必须提供分区(主)键。

  • 我是AWS的新手,在阅读DynamoDB文档时,我知道我们可以在同一个表上使用GSI和分区键。 DynamoDB如何根据到键(分区和辅助)将数据保持在同一表中。 谢谢

  • 问题内容: 我正在尝试使用数组来过滤并在列表中显示信息。为此,我使用了inbuild 方法。 但是我遇到了错误。 这是我的尝试(我通过过滤) 现场演示 问题答案: AngularJS 默认不包含过滤器。您可以使用angular- filter中的 那个。只包含JavaScript 并在您的应用中添加依赖项: 您的代码应立即生效!我编辑了您的Plunker,使其正常工作。

  • 我想为dynamodb中的订单创建一个表,每个订单由(UserID、date、Unique ID、products和total)组成,我想使用按日期排序的UserID查询特定用户的订单,我想知道如何选择分区键?它必须是独一无二的吗?如果是,我如何才能使它独一无二?在mongodb中,我会根据用户ID共享订单。如何使用dynamodb实现同样的效果?

  • 我正在使用AWS控制台和NodeJS。 我有一个带有分区键(user\u id)和排序键(company\u id)以及其他属性的dynamodb用户表。 我的一个属性是用户的电子邮件。电子邮件是唯一属性。 我需要通过电子邮件user_id,但我没有他的user_id和company_id。 我认为我应该使用全球二级指数。 我点击了用户表,打开索引选项卡并为该表创建了GSI。(名称:电子邮件,类型