标签:建表 table 注意 可靠 guid 抛出异常 添加 border tps
Amazon DynamoDB分布式NoSQL数据库服务,支持动态扩展,性能可靠
DynamoDB中使用主键标识唯一的项目,在创建表时必须指定主键。DynamoDB主键支持两种类型
DynamoDB流可以捕获表中的数据修改事件,这些事件以发生的顺序写入到流中。流有生命周期,从计入到结束一共有24小时,到期后将从流中自动删除。
以下几个事件将触发流的产生
DynamoDB提供了本地二级索引和全局二级索引,二者有一定的差异。
本地二级索引 | 全局二级索引 | |
概念 |
本地二级索引的含义是“本地”,意思是说二级索引的索引范围限定为具有相同分区键的表分区。 也就是说该索引只能在同一个分区中索引 |
全局是指对索引执行的查询可以跨基表中所有分区的所有数据 |
一致性 | 支持强一致性 | 仅支持最终一致性 |
限制 | 一个表中只能创建5个本地二级索引 | 一个表中只能创建5个全局二级索引 |
在创建表时需指定表的读取、写入的吞吐量。在生产环境中如果实际吞吐量超过了当前为DynamoDB设置的吞吐量,在经过重试后(如果DynamoDB Client设置了重试机制)最终将会抛出异常。
一旦超过DynamoDB的限制,那么请求会被限制,这种错误在程序中是无法自动恢复的,因此需要合理设置吞吐量和一个项目大小。
吞吐量在创建表时候可以指定,在运行中的线上业务也可以通过DynamoDB后台可视化界面或提供的API动态调整。API方式相对来说非常灵活。注意:DynamoDB每天每个表仅允许向下调整4次,向上调整无限制。
这个预置值有一套计算方式,如果您的业务读写量可预估那么请参考下面公式
在数据存储时,DynamoDB会将表的项目划分至多个分区,并由SSD支撑。数据的分布主要是根据分区值决定。
DynamoDB服务全权负责分区的管理,包括起始表分区个数、分区拆分。
首先我们需要知道,在DynamoDB中一个分区大约可保存10GB的数据,最多支持每秒3000个读请求和每秒1000个写请求。
在创建一个表时,会根据预置的读写吞吐量初始化表分区个数,计算公式如下:
初始化分区个数 = 向上取整( (读取预设吞吐量 / 3000) + (写入预设吞吐量 / 1000) )
比如:读取预设5000,写入预设2000,那么套用公式(5000 / 3000) + (2000 / 1000) = 3.6667 向上取整后 = 4个分区数
那么每个分区的可以支持5000 / 4 = 1250个读和(2000 / 4) = 500个写
DynamoDB是可以动态扩容的,吞吐量也可以保证。但这些都是基于它的分区设计。
既然是DynamoDB全权负责分区管理,那么分区拆分的时机和方式由DynamoDB决定。当必要的时候DynadmoDB会自动拆分现有的分区,以提供更多的分区以支持吞吐量。我们首先了解拆分的方式
上面提到,“在DynamoDB中一个分区大约可保存10GB的数据,最多支持每秒3000个读请求和每秒1000个写请求”
那么分区触发条件也是围绕着分区实际存储量和读写来触发的。
图中表示的是,起初表分配了4个分区(读取预设5000,写入预设2000,那么套用公式(5000 / 3000) + (2000 / 1000) = 3.6667 向上取整后 = 4个分区数)
每个分区有1250个读取单元和500个写入单元,此时将读容量从5000调整到8000时,此时4个分区不能满足了,DynamoDB将分区数翻倍 4 * 2 = 8个分区,因此每个分区酱油1000个读取单元和250个写入单元
如图,红框分区填满数据后,DynamoDB将把这个分区拆出两个新分区,在拆之前,总容量上限为8个分区 * 10GB容量 = 80GB,拆后总容量上限为9个分区 * 10GB容量 = 90GB
注意:这种从分区拆出的两个分区只会共享原分区的读写吞吐量。举个例子:
5000读和2000写,DynamoDB此时创建4个分区,每个分区读写容量为
5000 / 4 = 1250读取容量
2000 / 4 = 500 写入容量
假设其中一个分区即将满10G,DynamoDB会将这个分区拆出两个分区,此时这个表共有5个分区,他们的写入容量分别为
其中3个分区读写容量依然是1250读取容量和500写入容量,被拆出的两个分区读写为1250 / 2 = 625读取和500 / 2 = 250写入
参考:https://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/Introduction.html
标签:建表 table 注意 可靠 guid 抛出异常 添加 border tps
原文地址:https://www.cnblogs.com/sealedbook/p/8904610.html