Blu*_*oba 7 indexing amazon-dynamodb
我仍然对使用本地二级索引感到困惑.当需要LSI和GSI时,请给我具体的用例.
例如,"GenreAlbumTitle"索引应该是GSI还是LSI?https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey
我似乎无法理解需要LSI的需求,因为我需要的任何索引都将覆盖表的整行,而不仅仅是针对一个分区.如果有人也可以触及成本方面因为我了解LSI更便宜(但为什么它更便宜)?
谢谢你们!
F_S*_*O_K 20
Dynamo中的每个项目都必须具有唯一的主键.主键是基表索引.主键必须具有分区键,并且可以选择具有范围键(也称为排序键).在分区内,项目按范围键排序.使用分区键访问项目很快.
辅助索引允许您使用备用密钥查询表.本地二级索引(LSI)具有与主键(索引)相同的分区键,但具有不同的范围键.考虑LSI的方法是它与主索引(键)的数据相同,只是按不同的属性排序.
全局二级索引(GSI)具有与主键不同的分区键,因此是一组不同的数据.
LSI和GSI之间的重要区别之一是LSI 从基表获取其吞吐量容量,而您分别购买GSI吞吐量容量.换句话说,LSI不需要任何费用,GSI会产生超出基准表的额外成本.
让我们看一下Music表的例子.让我们说基表有这个模式;
Artist: (Primary Key) Partition Key
SongTitle: (Primary Key) Range Key
AlbumTitle:
DateOfRelease:
Run Code Online (Sandbox Code Playgroud)
此表是歌曲列表.我可以非常有效地访问艺术家的所有歌曲(即艺术家使用分区键查询).当我进行此查询时,歌曲将由SongTitle订购.我还可以使用唯一的主键非常有效地访问Artist和SongTitle的歌曲.
现在让我说我想获得艺术家的所有歌曲,但是由DateOfRelease订购.在当前架构中,我需要获取所有歌曲,然后在我的应用程序中对它们进行排序.一个很好的选择是使用Artist的分区键和范围键DateOfRelease创建一个新索引.这将是LSI,因为索引(Artist)的分区键与主键的分区键相同.我不需要购买额外的吞吐量容量,因为此索引将从基表容量中自行配置.
现在假设我想通过SongTitle订购的AlbumTitle来访问歌曲,即创建专辑列表.为了有效地执行此操作,我使用分区键AlbumTitle和范围键SongTitle创建一个新索引.这是一个GSI,因为分区键与主键不同.该GSI必须单独配置到基表,因此需要额外费用.
在回答你的问题时,GenreAlbumTitle是一个GSI,因为它有一个不同的分区键Music.
Mar*_*Kim 18
对于使用 LSI 的成本存在一些误解,所以让我在这里澄清一下。
使用 LSI 并不是免费的。就像 GSI 一样,dynamoDB 需要创建和维护表的额外部分副本才能快速获取结果。维护额外副本将产生与 GSI 相同的额外读取、写入和存储成本。(额外费用将以粗体显示)。唯一的区别是,您不分配单独的薪资计划,而是使用与主表相同的薪资计划。
在讨论额外成本之前,让我再次总结一下部分复制表中存储了哪些信息。部分表副本 (LSI) 包含分区键(与原始表相同)、排序键(与原始表不同)以及任何其他投影属性。
原表
| 艺术家(主键) | 歌曲名称(排序键) | 专辑名称 | 发布日期 |
|---|---|---|---|
| 迈克尔杰克逊 | 打败它 | 惊悚片 | 1982 年 12 月 1 日 |
| 周末 | 山丘 | 疯狂背后的美丽 | 2015 年 5 月 27 日, |
大规模集成电路
| 艺术家(主键) | 专辑名称(排序键) | 发布日期 |
|---|---|---|
| 迈克尔杰克逊 | 惊悚片 | 1982 年 12 月 1 日 |
| 周末 | 疯狂背后的美丽 | 2015 年 5 月 27 日, |
投影属性是我们想要从 LSI 查询的附加信息。我可以说,“显示 Weeknd 专辑的所有发行日期,按专辑名称排序”。正如您所看到的,我们不关心这里的歌曲标题,并且不包含在我们的 LSI 投影中。
读取的额外费用:
对于仅使用 LSI 表即可满足的查询,您需要支付 1 个读取单元的费用。示例:“显示 Weeknd 歌曲的所有发行日期,按专辑名称排序。”
对于 LSI 不知道如何自行提供服务的查询,您需要支付1 个额外的读取单元费用,从而迫使其前往主表寻求帮助。这总共需要 2 个阅读单元。示例:“显示 Weeknd 的所有发行日期和歌曲标题,按专辑名称排序。”
写入的额外费用:
(写入是对主表进行的,有其自己的写入成本,并且更改随后会传播到 LSI)
额外的存储费用
正如您所看到的,如果我们对 LSI 不小心,额外的成本可能会变得难以承受。为了最大限度地降低成本,您必须:
| 归档时间: |
|
| 查看次数: |
2108 次 |
| 最近记录: |