我知道用dynamodb编写查询,但是我还是新手。现在是一个项目 我设计的不仅仅是用分区键和排序键创建表 我的表的无SQL数据模型数据结构。因此,我已经实施 列出/添加/更新/删除动态引擎查询。
我的问题是如何查询所有记录,例如查询所有产品。 对于我的应用程序的“管理”面板,我需要显示实体类型的所有记录,每种实体类型的记录。
我知道查询所有记录基本上是在Retrieve all items from DynamoDB using query?之前提出的。
但是,我发布的是在没有扫描操作的情况下执行此操作的问题;如何根据或考虑适当/完整的nosql设计进行操作。 我之所以问是因为我当前正在使用静态值作为分区键。
我遵循单表设计(在任何情况下,建议最精心设计的应用程序仅使用1个表)。为此,在此链接https://www.trek10.com/blog/dynamodb-single-table-relational-modeling/上,建议对排序键使用静态值,该键将成为(反向查找)索引的主键。这样就可以查询所有“产品”。
我的应用程序将具有“类别”。它还将创建“调查”,每个调查都属于一个类别。对于管理面板,我需要显示所有类别以及所有调查。
我目前正在做什么:
I)表格设计:
表格:tbl_surveys
分区键:tbl_pk_surv
排序键:tbl_sk_surv
一个“数据”属性:data_attr
我创建了一个 GSI,其中tbl_sk_surv作为分区键,而 data_attr作为Sortkey 。
II)例如,对于类别,类别记录如下所示:
tbl_pk_surv | tbl_sk_surv | data_attr | cat_name | status
Cat-1VqNAF3Vi1 | ADMIN_CATEGORY | 1565673999 | Cat1 | 1
Cat-QUTQHQwd42 | ADMIN_CATEGORY | 1565950613 | Cat2 | 1
我正在使用'ADMIN_CATEGORY'作为GSI哈希键(tbl_sk_surv)的值查询GSI。
请让我知道还可以怎么做。通常,请提供有关nosql数据建模的指南。
我已遵循以下有关nosql设计的文档
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql-B.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html#bp-adjacency-lists
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-relational-modeling.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-gsi-overloading.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html
https://www.trek10.com/blog/dynamodb-single-table-relational-modeling/
https://aws.amazon.com/blogs/database/using-sort-keys-to-organize-data-in-amazon-dynamodb/
更新:
经过更多搜索,我发现以下问题与我的类似。但是,我要更具体地询问,因为我正在使用GSI。无论哪种方式,请指导:
How to design key schema to have only one DynamoDB table per application?
答案 0 :(得分:0)
您的设计看起来只正确!
据我了解,
如果您可以详细列出所有用例和数据,则可以更好地回答相同的问题
答案 1 :(得分:0)
我想今天,距您提出问题的5个月时间,您已经是dynamodb建模专家了:)我将向那些寻求相同问题并作为自我锻炼的未来访客提供我的观点。
1-第一步(当然,在获得所有用例之后)是设计ERM的过程,这将非常有帮助。 2-列出所有访问模式,对数据库建模之前首先要了解从数据中获取什么非常重要。 3-然后,您可以确定商品和GSI(如有需要)的PK和SK(如有必要)
您可以说SK是您的GSI PK,并这样查询GSI:
来自GSI的“ PK = ADMIN_CATEGORY”