当前位置: 首页 > 工具软件 > DynamoDB > 使用案例 >

DynamoDB基础

龙俭
2023-12-01

什么是DynamoDB

Amazon DynamoDB 是一项完全托管的 NoSQL 数据库服务,提供快速而可预测的性能,能够实现无缝扩展。 Amazon DynamoDB 可以存储和检索任何大小的数据, 并处理任何级别的请求流量

DynamoDB特性

  • 无缝拓展

    DynamoDB可以实现水平拓展,当表存储大小或访问量超过一定阈值时,DynamoDB会自动且无缝地把一个表扩展到多个(几百个)服务器上以满足使用请求。

  • 性能高速可期

    AWS DynamoDB服务运行在固态盘上面,可以在任何扩展级别下维持一 致性和低延迟。服务自身响应延迟,通常在几毫秒。

  • 易于管理

    AWS DynamoDB是一个完全托管的服务,你只需要关注数据处理逻辑, 而不需要担心硬件和软件的配给、建立、配置,也不要担心软件安装和 打补丁包,更不必担心如何运行一个可靠的分布式数据库簇,或者把数 据分区到多个实例。

  • 内置容错性

    AWS DynamoDB具有内在的容错能力,可以自动、同步地把你的数据复 制到一个Region中的多个可用的Zone中,即使遇到单个机器或设施的实 效,你的数据也可以得到很好的保护。

  • 数据高度灵活

    AWS DynamoDB没有固定的模式(schema)。相反,每个项目(item)都 可以具有不同数量的属性,可以支持多种数据类型,比如string、 number和set;单个项目即可存储复杂的层级结构数据,你可以采用操作 json文档的形式操作数据项目。

  • 强一致性、原子计数器

    AWS DynamoDB除了支持读操作的最终一致性外,还支持读操作的强一 致性,从而保证总可获得最新的数据。这种服务也可以支持原子计数器 (Atomic Counter),允许你通过一个简单的API调用就可以自动增加和 减少数值属性。

为何选型DynamoDB

  • 首先,DynamoDB的松散的数据结构是可以很好地存储多国 家复杂专利数据结构的;

  • 其次,DynamoDB的内置容错特性、自动扩容特性可以极大 地降低运维成本;

  • 再者,DynamoDB的请求延迟非常低,性能可以满足业务场 景的基本需求;

  • 最后,DynamoDB的综合使用费用是相对低廉的,可以较好 地节省企业使用成本;

组件

  • 类似于其他数据库系统,DynamoDB 将数据存储在表 中,表是数据的集合。

  • 项目

    每个表包含多个项目。项目 是一组属性,具有不同于 所有其他项目的唯一标识。每个项目的属性数量和个数可以不同。

  • 属性

    每个项目包含一个或多个属性。属性 是基础的数据元 素,无需进一步分解。

主键

创建表时,除表名称外,还必须指定表的主键

主键唯一标识表中的每个项目,因此,任意两个项目的主键都不相同。

DynamoDB支持两种不同类型的主键:分区键分区键和排序键

分区键(HashKey) 单一主键

​ 简单的主键,由一个称为分区键(HashKey)的属性组成。 在只有分区键的表中,任何两个项目都不能有相同的分区键值。

分区键和排序键(HashKey&RangeKey) 复合主键

​ 此类型的键由两个属性组成。第一个属性是分区键(HashKey),第二个属性 是排序键(RangeKey)。 在具有分区键和排序键的表中,两个项目可能具有相同的分区键值。但是 ,这两个项目必须具有不同的排序键值。

注意: 一旦定义好Table的主键,每个项目都必须包含该主键,除主键外,每个项目的其他属性都可不同;

索引

DynamoDB支持两种索引:本地二级索引全局二级索引

本地二级索引 分区键与主键相同

一种分区键与表主键分区键相同,但排序键与表排序键不同的索引;每表最多可以定义五个本地二级索引;

全局二级索引 分区键可以与主键不同

一种分区键与排序键可以和表分区键与排序键不同的索引;美表最多可以定义五个全局二级索引;

DynamoDB中的索引本质上,是属于基表(被索引表)的一个附表; 创建索引的时候,可以同时指定其他投影属性; 投影属性即其他可以通过该索引被直接查询到的属性; 当基表项目产生增删改操作时,DynamoDB会自动更新索引中的项目;

吞吐量

概念

吞吐量可以理解为DynamoDB数据吞吐能力的度量单位。

预置吞吐量

预置吞吐量可以理解为DynamoDB对预期数据访问量的设定阈值; 预置吞吐量用以满足应用程序所需的读写活动,同时确保一致的低延 迟性能。

受限

当实际用量低于预置吞吐量时,可认为DynamoDB性能不受限制; 当实际用量超过与之吞吐量时,超出部分请求将被迫等待或返回400 错误,称为“吞吐量受限”。

分区

DynamoDB会自动管理分区,在以下情况下,会DynamoDB 自动分区 :

  • 表的预置吞吐量设置超出了现有分区的支持能力;

  • 现有分区填充已达到容量上限,并且需要更多的存储空间;

思考?那么吞吐量是不是可以调到尽可能大呢?

吞吐量过高,会带来两个影响: • 费用过高,DynamoDB按使用计费,吞吐量部分的计费规则不是按照实际使用量,而是根据表预置吞吐量计算; • 表被迫分区,表分区后,将会在特定情形下导致表吞吐量利用率低;

吞吐量计算

分类

吞吐量分为读吞吐量和写吞吐量两种。

读吞吐量

1读吞吐量 = 1*(<4KB)项目*强一致性读取 / 秒

1读吞吐量 = 2*(<4KB)项目*最终一致性读取 / 秒

写吞吐量

1读吞吐量 = 1*(<4KB)项目*一次写入 / 秒

读吞吐量计算

每秒强一致性读取 80 个项目(3KB), 则单次吞吐量为: 3 KB / 4 KB = 0.75 ≈ 1 则实际消耗吞吐量为: 1 * 80 = 80

写吞吐量计算

每秒写 100个项目(512B), 则单次吞吐量为: 512 B / 1 KB = 0.5 ≈ 1 则实际消耗吞吐量为: 1 * 100 = 100

支持的数据类型

Amazon DynamoDB支持以下原始数据类型和原始包装器类。

DynamoDB 支持以下基元 Java 数据类型和基元封装类。

  • String
  • Boolean, boolean
  • Byte, byte
  • Date(为 ISO_8601毫秒精度字符串,转换为 UTC)
  • Calendar(为 ISO_8601 毫秒精度字符串,转换为 UTC)
  • Long, long
  • Integer, int
  • Double, double
  • Float, float
  • BigDecimal
  • BigInteger

Amazon DynamoDB支持Java Set集合类型。 如果映射的集合属性不是Set,则将引发异常。

以下是 DynamoDB 数据类型描述符的列表:

  • S – 字符串
  • N – 数字
  • B – 二进制
  • BOOL – 布尔值
  • NULL – Null
  • M – 映射
  • L – 列表
  • SS – 字符串集
  • NS – 数字集
  • BS – 二进制集

下表汇总了上述 Java 类型到 DynamoDB 类型的映射。

Java 类型DynamoDB 类型
所有数字类型N(数字类型)
字符串S(字符串类型)。
布尔型BOOL(布尔值类型),0 或 1。
字节缓冲区B(二进制类型)
DateS(字符串类型)。日期值存储为符合 ISO-8601 格式的字符串。
Set 集合类型SS (字符串集) 类型、NS (数字集) 类型或 BS (二进制集) 类型。

分区触发

  • 3000读吞吐量

    单个分区设定读吞吐量大于3000时,将触发自动分区

  • 数据大于10GB

    单个分区数据大小大于10GB时,将触发自动分区

  • 1000写吞吐量

    单个分区设定写吞吐量大于1000时,将触发自动分区

注意

  • 表分区后,数据将被分散在多个分区;
  • 表分区后,预置吞吐量将被平均分配到各分区;
  • 当进行表扫描等密集操作时,若操作数据恰好集中于某特定分区;
  • 将会出现预置吞吐量未完全使用,但请求受限的情况;
  • 表分区不受用户管理,表分区后不可逆;

使用限制

基础限制

  • 表单个项目大小限制为400KB;
  • 表单个项目大小在400KB以内时,属性数量无限制;
  • 表项目中属性值不可为空字符串或空Set,但可以是空List;
  • DynamoDB 支持嵌套属性,最高支持嵌套深度为 32 级;
  • 表的大小没有实际限制,表的项目数和字节数是无限制;
  • HashKey的最小长度为 1 个字节,最大长度为 2048 字节;
  • RangeKey的最小长度为 1 个字节。最大长度为 1024 字节;
 类似资料: