从DynamoDB文档:
全局二级索引 - 具有分区键和排序键的索引,可以与基表上的索引不同 . 全局二级索引被视为“全局”索引,因为索引上的查询可以跨所有分区跨越基表中的所有数据 .
本地二级索引 - 与基表具有相同分区键但具有不同排序键的索引 . 本地二级索引是“本地”的,因为本地二级索引的每个分区都限定为具有相同分区键值的基表分区 .
这对我来说没有意义,没有多少搜索能够恰当地向我解释 .
有人可以帮助我理解这个吗?
将数据插入DynamoDB时,它会在内部对数据进行分区并在内部存储在不同的存储节点中 . 这基于分区键 .
假设您希望基于非密钥(既不是分区也不是排序键)属性来查询项目,您需要使用扫描(由于检查表中的所有项目,这是很昂贵的) .
这就是GSI和LSI的用武之地 . 让我们举一个Student表的例子,其中StudentsId作为排序键,SchoolId作为分区键 .
如果您的应用程序有问题,例如让所有学生都达到5年级的学生,那么LSI非常有用 .
如果您需要查询所有学校的所有5年级学生(在所有学校分区中),您将需要一个GSI .
Local secondary index(LSI)
table
与 table 共享 capacity units
capacity units
index 的 partition key 必须与 table 的 partition key 相同
index
partition key
a table 可以有5 LSI
LSI
Global secondary index(GSI)
可以随时创建,但需要时间来设置一个(由于将原始 table 项复制到索引 table ,它的成本 read capacity units 为 table )
read capacity units
有一套单独的 capacity unit
capacity unit
任何 attribute 可以是 partition key
attribute
a table 可以有5 GSI
GSI
2 回答
将数据插入DynamoDB时,它会在内部对数据进行分区并在内部存储在不同的存储节点中 . 这基于分区键 .
假设您希望基于非密钥(既不是分区也不是排序键)属性来查询项目,您需要使用扫描(由于检查表中的所有项目,这是很昂贵的) .
这就是GSI和LSI的用武之地 . 让我们举一个Student表的例子,其中StudentsId作为排序键,SchoolId作为分区键 .
如果您的应用程序有问题,例如让所有学生都达到5年级的学生,那么LSI非常有用 .
如果您需要查询所有学校的所有5年级学生(在所有学校分区中),您将需要一个GSI .
Local secondary index(LSI)
只能在创建
table
时创建与
table
共享capacity units
index
的partition key
必须与table
的partition key
相同a
table
可以有5LSI
Global secondary index(GSI)
可以随时创建,但需要时间来设置一个(由于将原始
table
项复制到索引table
,它的成本read capacity units
为table
)有一套单独的
capacity unit
任何
attribute
可以是partition key
a
table
可以有5GSI