Indexing DynamoDB中局部索引和全局索引之间的差异
我对这两个二级索引以及它们之间的差异感到好奇。很难想象这是什么样子。我认为,这将帮助更多的人而不仅仅是我。本地二级索引仍然依赖于原始散列键。 当您提供具有hash+range的表时,请将LSI视为hash+range1、hash+range2。。哈希+范围6。 您还可以查询5个范围属性。 此外,只有一个配置的吞吐量 全局二级索引定义了一个新的范例-每个索引具有不同的哈希/范围键。Indexing DynamoDB中局部索引和全局索引之间的差异,indexing,amazon-dynamodb,secondary-indexes,Indexing,Amazon Dynamodb,Secondary Indexes,我对这两个二级索引以及它们之间的差异感到好奇。很难想象这是什么样子。我认为,这将帮助更多的人而不仅仅是我。本地二级索引仍然依赖于原始散列键。 当您提供具有hash+range的表时,请将LSI视为hash+range1、hash+range2。。哈希+范围6。 您还可以查询5个范围属性。 此外,只有一个配置的吞吐量 全局二级索引定义了一个新的范例-每个索引具有不同的哈希/范围键。 这打破了原来每个表使用一个哈希键的习惯。 这也是为什么在定义GSI时,需要为每个索引添加一个已配置的吞吐量并为此付费
这打破了原来每个表使用一个哈希键的习惯。 这也是为什么在定义GSI时,需要为每个索引添加一个已配置的吞吐量并为此付费
有关差异的更多详细信息,请参见另一种解释方式:LSI帮助您对具有相同哈希键的项执行其他查询。GSI帮助您对“整个表”中的项目执行类似的查询。非常有用 如果您有用户配置文件表:
唯一的id、名称、电子邮件。如果您需要在名称、电子邮件上对表进行查询,那么唯一的方法就是让它们成为GSI(LSI不会有帮助)以下是可能的索引搜索:
- 散列
- 按哈希+范围
- 通过哈希+本地索引
- 按全球指数
- 按全局索引+范围索引
- 对于全局索引:
@DynamoDBIndexHashKey(globalSecondaryIndexName = INDEX_GLOBAL_RANGE_US_TS) @DynamoDBAttribute(attributeName = PROPERTY_USER) public String getUser() { return user; }
- 对于与全局索引关联的范围索引:
@DynamoDBIndexRangeKey(globalSecondaryIndexName = INDEX_GLOBAL_RANGE_US_TS) @DynamoDBAttribute(attributeName = PROPERTY_TIMESTAMP) public String getTimestamp() { return timestamp; }
以下是文档中的正式定义: 全局二级索引-具有哈希和范围键的索引,可以 与桌上的不同。一个全局二级索引是 被认为是“全局的”,因为对索引的查询可以跨越所有 表中的数据,跨所有分区 本地二级索引-与本地二级索引具有相同哈希键的索引 表,但范围键不同。本地二级索引为“本地” 在这个意义上,本地二级索引的每个分区都是有范围的 指向具有相同哈希键的表分区 然而,这些差异远远超出了关键定义的可能性。以下是一些直接影响指数维护成本和工作量的重要因素:
- 吞吐量:
- 管理层:
- 读取一致性:
- 预测:
来源:一种说法是: LSI—允许您在使用多个不同属性“过滤”或限制查询的同时,对单个哈希键执行查询 GSI—允许您对一个表中的多个哈希键执行查询,但因此会增加吞吐量 表类型及其工作方式的更广泛细分如下: 仅散列 你可能已经知道了;哈希键本身必须是唯一的,因为写入已存在的哈希键将覆盖现有数据 散列+范围 哈希键+范围键允许您有多个
queryExpression.setConsistentRead(false);