AWS DynamoDB 本地二级索引与全局二级索引有什么区别?

Cha*_*aag 7 amazon-dynamodb

来自 DynamoDB 文档:

\n\n

全局二级索引 \xe2\x80\x94 具有分区键和排序键的索引,可以与基表上的索引不同。全局二级索引被视为“全局”,因为对该索引的查询可以跨越基表中的所有数据,跨所有分区。

\n\n

本地二级索引 \xe2\x80\x94 与基表具有相同分区键但排序键不同的索引。本地二级索引是“本地”的,因为本地二级索引的每个分区的作用域都是具有相同分区键值的基表分区。

\n\n
\n\n

这对我来说没有意义,并且没有任何搜索能够恰当地向我解释它。

\n\n

有人可以帮助我理解这一点吗?

\n

RNA*_*RNA 7

本地二级索引(LSI)

  • 只能在创建时创建table
  • capacity units与分享table
  • index'必须与'partition key相同tablepartition key
  • 一个table可以有5个LSI

全球二级指数(GSI)

  • 可以随时创建,但需要时间来设置(由于将原始table项目复制到索引中table,其成本read capacity unitstable
  • 有一组单独的capacity unit
  • 任何都attribute可以是partition key
  • 一个table可以有5个GSI


Ash*_*han 6

当您将数据插入 DynamoDB 时,它会在内部对数据进行分区并存储在内部不同的存储节点中。这是基于分区键的。

假设您想要基于非键(既不是分区也不是排序键)属性查询项目,您需要使用扫描(这很昂贵,因为它会检查表中的所有项目)。

这就是 GSI snd LSI 的用武之地。让我们以 Student 表为例,其中 StudentsId 作为排序键,SchoolId 作为分区键。

如果您的应用程序有查询(例如获取给定学校 5 年级的所有学生)的查询,那么 LSI 非常有用。

如果您需要查询所有学校(跨所有学校分区)的所有 5 年级学生,您将需要 GSI。