【问题标题】:What is the difference between an AWS DynamoDB local vs. global secondary index?AWS DynamoDB 本地二级索引与全局二级索引有什么区别?
【发布时间】:2018-11-01 11:14:13
【问题描述】:

来自 DynamoDB 文档:

全局二级索引 — 具有分区键和排序键的索引,可以不同于基表上的索引。全局二级索引被认为是“全局的”,因为对索引的查询可以跨越基表中的所有数据,跨越所有分区。

本地二级索引 — 与基表具有相同分区键但排序键不同的索引。本地二级索引是“本地的”,因为本地二级索引的每个分区都被限定为具有相同分区键值的基表分区。


这对我来说是没有意义的,没有多少搜索能够恰当地向我解释。

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

【问题讨论】:

标签: amazon-dynamodb


【解决方案1】:

本地二级索引(LSI)

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

全球二级指数(GSI)

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

【讨论】:

  • 更新:现在我们可以拥有超过 20 个 GSI,(默认 20 个,可以通过增加配额请求来增加)
【解决方案2】:

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

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

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

如果您的应用程序有查询(例如获取指定学校的所有 5 年级学生),LSI 会很有用。

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

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 2018-10-09
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多