繁体   English   中英

DynamoDB LSI 或 GSI 查询复合属性

[英]DynamoDB LSI or GSI to query on composite attribute

我正在尝试将 DynamoDB 用于我的 JAVA 项目,我有这个(从我的角度来看)我必须涵盖的奇怪场景。 让我解释一下我是如何组织我的桌子的:

假设我必须存储这些与书籍相关的信息:

  • book_id (UUID) 用作自动生成的 PK

  • author_id (UUID)

  • type (字符串)

  • book_code (UUID) 这与 book_id 的概念不同

  • publishing_house_id (字符串)

  • book_gender (字符串)

以及其他不可查询的动态属性,我正在考虑存储为文档(JSON)

现在,我需要的查询是:

  1. 按 book_id 插入/获取/更新/删除书
  2. 通过author_id获取所有书籍
  3. 通过author_id and type
  4. 通过book_code, publishing_house_id, book_gender获取图书(我想强调这个元组是独一无二的)
  • 使用 book_id 作为 PK,我将能够覆盖第一个查询集(使用 book id 的 CRUD)
  • 对于查询#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 更好?

对于#4,如果您总是将这三者放在一起,则使用该连接值创建一个属性并将其用作 GSI 的 PK,以便于直接查找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM