mysql 本地索引 全局索引_indexing - DynamoDB中本地和全局索引之间的差异

一种说法是:

LSI - 允许您在单个Hash-Key上执行查询,同时使用多个不同的属性来过滤" 或限制查询。

GSI - 允许您对表中的多个哈希密钥执行查询,但结果会导致额外的吞吐量。

下表更广泛地分析了表格类型及其工作原理:

只有哈希

你可能已经知道了; 哈希密钥本身必须是唯一的,因为写入已存在的哈希密钥将覆盖现有数据。

哈希+范围

Hash-Key + Range-Key允许您拥有多个相同的Hash密钥,只要它们具有不同的范围密钥即可。 在这种情况下,如果您写入已经存在的Hash-Key,但是使用该Hash-Key尚未使用的Range-Key,则会生成一个新项目,而如果一个具有相同Hash + Range组合的项目 已存在,它会覆盖匹配项。

另一种思考方式就像是带有格式的文件。 只要格式(范围)不同,您就可以在同一文件夹(表)中拥有与另一个文件具有相同名称(哈希)的文件。 同样,只要名称不同,您就可以拥有相同格式的多个文件。

LSI

LSI基本上与Hash-Key + Range-Key相同,并且在创建项目时遵循与其相同的规则,除了您还必须为LSI提供值之外; 它们不能留空/ null。

说LSI是" Range-Key 2" 是不完全正确的,因为你不能(使用我之前的文件和格式类比)一个名为:fileName和fileFormat的文件。但是,您可以拥有filePriority和fileName或fileName和fileName2。

基本上,LSI只是一个" Filter-key",而不是一个实际的Range-Key; 您的基础哈希值和范围值组合必须仍然是唯一的,而LSI值根本不必是唯一的。 查看它的更简单方法可能是将LSI视为文件中的数据。 您可以编写代码,找到名称为" PROJECT101"的所有文件,无论它们是fileName,然后读取内部数据以确定查询中应包含的内容以及省略的内容。 这基本上就是LSI的工作原理(只是没有打开文件来读取其内容的额外开销)。

GSI

对于GSI,您实际上是为每个GSI创建另一个表,但没有维护多个单独的表来反映它们之间的数据的麻烦; 这就是他们花费更多吞吐量的原因。

因此,对于GSI,您可以指定fileName作为基本哈希密钥,并将fileFormat指定为基本范围密钥。 然后,您可以指定一个GASH,其Hash-Key为filePriority,范围密钥为fileName.如果您愿意,可以在fileName或fileName2上查询,这与LSI不同,您只能在fileName上查询。

主要优点是您只需要维护一个表而不是2个,并且无论何时写入主哈希/范围或GSI哈希/范围,其他(s)也会自动更新, 所以你不能忘记" 使用多表设置更新其他表格。 此外,在更新一个之后和更新另一个之前,没有机会丢失连接,就像多表设置一样。

另外,GSI可以重叠" 基础哈希/范围组合。 因此,如果你想用fileName和fileFormat作为你的基础哈希/范围和filePriority和fileName作为你的GSI,你可以。

最后,GSI哈希+范围组合不必是唯一的,而基本哈希+范围组合必须是唯一的。 这是双/多表设置无法实现的,但与GSI一起使用。 因此,在更新时,您必须为基本和GSI哈希+范围提供值; 这些值都不能为空/ null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值