其他分享
首页 > 其他分享> > AWS55.Dynamodb全局二级索引

AWS55.Dynamodb全局二级索引

作者:互联网

Dynamodb全局二级索引

=== DynamoDB - 主键

  • DynamoDB 基于主键存储检索数据
  • 有 2 种类型的主键。简单主键(分区键)复合键(分区键和排序键)
  • 分区键很重要,因为它们是内部哈希函数的输入,该函数确定存储数据的分区或物理位置
  • 如果使用分区键作为主键,则没有两个项目具有相同的分区键
  • 2 个项目可以具有相同的分区键,但它们必须具有不同的排序键
  • 具有相同**分区键的所有项目都存储在一起,然后根据排序键值进行排序。

=== 什么是 DynamoDB 中的索引

  • 在 SQL 数据库中,索引是一种数据结构,可用于对表中的特定列执行查询
  • 选择需要包含在索引中的列,然后对索引不是整个数据集运行搜索

=== 在 DynamoDB 中,支持两种类型的索引来帮助加快查询速度。

  • 本地二级索引
  • 全局二级索引

=== 本地二级索引

  • 只能在创建表时创建
  • 以后无法删除、添加或修改
  • 它具有与原始表相同的分区键
  • 具有不同的排序键
  • 为您提供数据的不同视图,根据备用排序键进行组织
  • 使用索引的任何基于 Sort 键的查询都比使用主表快得多

=== 全局二级索引

  • 您可以在创建时创建 GSI,也可以稍后添加
  • 不同的分区键以及不同的排序键
  • 它给出了完全不同的数据视图
  • 加快与此备用分区排序键相关的查询速度

image

=== 案例研究:创建全局二级索引

  • 我们通过创建一个表并在表上添加 GSI
  • 在此示例中,假设我们要跟踪用户返回的订单。我们将返回日期存储在** ReturnDate 属性中**。
  • 我们还将添加一个全局二级索引,其中包含一个复合键架构,使用 ReturnDate 作为 HASH 键UserAmount 作为 RANGE 键

=== 架构图

image

== 实验步骤

=== 创建 DynamoDB 表

  • 请确保您位于美国东部(弗吉尼亚北部)us-east-1 区域
  • 顶部菜单导航到 DynamoDB,单击创建表
  • 表名称:输入WhizOrderTable
  • 分区键:输入UserName并选择字符串
  • 排序键:输入OrderID,然后选择字符串
  • 分区键和排序键的组合,唯一标识 DynamoDB 表中的每个项目
  • 将所有其他设置保留为默认值,然后单击"创建表"

image

  • 您的表将在 2-3 分钟内创建

=== 创建项目

  • 单击项目选项卡,然后选择WhizOrderTable,然后单击创建项目

image

  • 选择创建项目后,您将看到"UserName""OrderID"
  • 但我们在表中还需要 2 个属性。单击"添加新属性",然后从下拉菜单中选择"字符串"
  • 将属性名称指定为ReturnDate
  • 再次单击添加新属性,然后从下拉菜单中选择字符串
  • 现在将属性名称指定为UserAmount
  • 现在输入如下所示的值
  • UserName : 输入HarryPotter
  • OrderID :输入20160630-12928
  • ReturnDate : 输入20190705
  • UserAmount : 输入 142.23
  • 现在点击创建项目

image

  • 导航到"表",然后单击"概述"部分旁边的"索引"选项卡
  • 单击"创建索引"
  • 输入"分区键""ReturnDate",将"排序键"输入为"UserAmount"
  • 将所有内容保留为默认值,然后单击"创建索引",然后等待索引状态更改为"活动"
  • "索引名称"的命名法是我们选择的列的组合,后跟"index"。您可以根据要求修改索引名称

image

  • 全局二级索引处于活动状态后,您可以检查索引选项卡进行确认
  • 注意:需要5-10分钟

image

  • 移动到项目选项卡,然后选择WhizOrderTable,然后单击创建项目
  • 属性名称 - 值
  • UserName : 输入HarryPotter
  • OrderID : 输入20160630-28176
  • ReturnDate : 输入20190513
  • UserAmount : 输入88.30
  • 属性名称 - 值
  • UserName : 输入Ron
  • OrderID : 输入20170609-25875
  • ReturnDate : 输入20190628
  • UserAmount : 输入116.86
  • 属性名称 - 值
  • UserName : 输入Ron
  • OrderID : 输入20170609-4177
  • ReturnDate : 输入20190731
  • UserAmount : 输入27.89
  • 属性名称 - 值
  • UserName : 输入Voldemort
  • OrderID : 输入20170609-17146
  • ReturnDate : 输入20190511
  • UserAmount : 输入114.00
  • 属性名称 - 值
  • UserName : 输入Voldemort
  • OrderID : 输入20170609-18618
  • ReturnDate : 输入20190615
  • UserAmount : 输入122.45
  • 请注意,您需要为个人创建项目。不要一次添加每个人的所有详细信息并创建单个项目
  • 使用提供的数据创建所有项后,该表如下所示

image


=== 使用全局二级索引获取数据

  • 现在转到"项目",然后单击"扫描/查询项目"选项。
  • 在使用扫描选项显示索引之前刷新页面
  • 让我们尝试使用"扫描"选项来搜索数据
  • 选择"扫描"选项。
  • 表或索引:选择ReturnDate-UserAmount-index
  • 展开"筛选条件"
    ** 属性名称:输入ReturnDate
    ** 类型 : 选择字符串
    ** 条件 : 介于
    ** 值 : 输入2019050120190531
  • 在此示例中,我们尝试获取在 5 月份返回其订单的用户
  • 现在点击运行按钮。

image

  • 现在,您将能够根据我们提供的搜索过滤器看到下面返回的项目

image

  • 让我们尝试使用"查询"选项来搜索一些数据
  • 单击"扫描"旁边的"查询"
  • 表或索引:选择ReturnDate-UserAmount-index
  • ReturnDate : 输入20190628
  • UserAmount(排序键):选择大于或等于
  • 输入排序键:输入 100
  • 在这里,我们需要检查哪些用户在该特定日期返回了项目。为此,我们根据要求使用排序键限定金额
  • 点击运行按钮。

image

image

  • 通过这种方式,全局二级索引使我们能够快速找到表中的特定项目,在通常情况下需要全表扫描

标签:单击,创建,ReturnDate,Dynamodb,索引,UserAmount,AWS55,输入
来源: https://www.cnblogs.com/ajajroom/p/16408447.html