Amazon DynamoDB 是一项完全托管的 NoSQL 数据库服务,提供快速而可预测的性能,能够实现无缝扩展。 Amazon 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支持两种不同类型的主键:分区键、分区键和排序键
分区键(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
– NullM
– 映射L
– 列表SS
– 字符串集NS
– 数字集BS
– 二进制集下表汇总了上述 Java 类型到 DynamoDB 类型的映射。
Java 类型 | DynamoDB 类型 |
---|---|
所有数字类型 | N (数字类型) |
字符串 | S (字符串类型)。 |
布尔型 | BOOL (布尔值类型),0 或 1。 |
字节缓冲区 | B (二进制类型) |
Date | S (字符串类型)。日期值存储为符合 ISO-8601 格式的字符串。 |
Set 集合类型 | SS (字符串集) 类型、NS (数字集) 类型或 BS (二进制集) 类型。 |
3000读吞吐量
单个分区设定读吞吐量大于3000时,将触发自动分区
数据大于10GB
单个分区数据大小大于10GB时,将触发自动分区
1000写吞吐量
单个分区设定写吞吐量大于1000时,将触发自动分区