【发布时间】:2022-08-11 01:12:27
【问题描述】:
我正在尝试将 DynamoDB 用于我的 JAVA 项目,并且我有这个(从我的角度来看)我必须涵盖的奇怪场景。让我解释一下我是如何组织我的桌子的:
假设我必须存储这些与书籍相关的信息:
-
book_id(UUID) 用作自动生成的 PK -
author_id(UUID) -
type(字符串) -
book_code(UUID) 这与 book_id 的概念不同 -
publishing_house_id(字符串) -
book_gender(字符串)
以及其他不可查询的动态属性,我正在考虑存储为文档(JSON)
现在,我需要的查询是:
- 按 book_id 插入/获取/更新/删除图书
- 通过
author_id获取所有书籍 - 通过
author_id and type获取所有书籍 - 通过
book_code, publishing_house_id, book_gender获取书籍(我想强调这个元组是独一无二的)- 使用 book_id 作为 PK 我将能够覆盖第一个查询集(CRUD 使用 book id)
- 对于查询 #2 和 #3,我们的想法是创建一个 GS 索引,其中 author_id 是 PK,type 是 SK。
为了涵盖查询#4,我正在考虑:
- 创建一个专用的属性 book_sk 我将在其中存储: book_gender#publishing_house_id#book_code
- 使用此 book_sk 作为 SK 创建本地二级索引
- 也许我可以将 book_code、publishing_house_id、book_gender 移动到 Document 字段中,而不是在此处拥有这些不可查询的属性。
我不太确定这个设计。
你怎么看?
在这种情况下,查询#4 是使用 LSI 还是 GSI 更好?
标签: amazon-web-services nosql amazon-dynamodb dynamodb-queries amazon-dynamodb-index