【问题标题】:DynamoDB Single Table Design: How to get all entities of a typeDynamoDB 单表设计:如何获取一个类型的所有实体
【发布时间】:2020-11-22 08:39:36
【问题描述】:

我正在为我的应用程序中的相关实体创建单表 DynamoDB 设计。我主要是从这里借来的想法: https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/data-models/an-online-shop/AnOnlineShop.md

虽然大部分事情对我来说都很清楚,但对我来说缺少一件简单的事情。如何查询某种类型的所有实体?有关架构,请参见下图。

如您所见,主要实体记录具有相同值的 PK 和 SK。 SK 仅在您希望与其他实体具有 1:N 关系时才会更改,如 entityType 仓库项中所示。

我的主要问题是:我如何获得所有用户(当然无需扫描快速)?

我学到的是我不能在 PartitionKey 上做 begin_with。当然我可以考虑做这样的记录:

PK       SK
users   u#logemann
users   u#smith

但这需要额外的数据条目,并且会与上面看到的我的主要用户记录有些重复。或者是否可以创建一个 GSI,PK 为“用户”,SK 为 SK?

解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: amazon-web-services nosql amazon-dynamodb


    【解决方案1】:

    我认为最简单的方法是在 GSI 中添加“EntityType”作为 PartitionKey,将“PK”添加为 SortKey。这样我就可以以一种高性能的方式查询我的所有实体。

    【讨论】:

    • 正确!这是 DynamoDB 解决这个问题的方法。
    • @SethGeoghegan 如果您有一个大型数据集,这可能不是一个问题,因为 GSI 在单个分区键中可能包含大量文档?编辑:例如,在 OPs 问题中 user 是一种类型,如果有 10 万用户,那么 user GSI 分区键可能会非常大?或者这不是问题?
    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 2015-02-16
    • 2017-02-22
    • 2017-08-09
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多