加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

实践出真知,看我们如何化解DynamoDB的挑战

发布时间:2019-10-18 22:00:51 所属栏目:编程 来源:咔咔侃技术
导读:【大咖·来了 第7期】10月24日晚8点寓目《智能导购对话呆板人实践》 DynamoDB 是 Amazon 基于《 Dynamo: Amazons Highly Available Key-value Store 》实现的 NoSQL 数据库处事。它可以满意数据库无缝的扩展,可以担保数据的耐久性以及高可用性。开拓职员不

另外尚有:

  • TTL:我们操作了 Amazon DynamoDB 提供的 TTL 特征打点那些有生命周期的数据。TTL 是对表中要逾期的数据配置特按时刻戳的一种机制,一旦时刻戳逾期 DynamoDB 在靠山会删除逾期的数据,相同于 Redis 中的 TTL 观念。借助 TTL 的手段,我们镌汰了许多营业上不须要的逻辑鉴定,同时还低落了因存储量带来的本钱。
  • 流:在我们的营业中没有启用流来捕捉表的举措,但我们以为 DynamoDB 流是一个很是好的特征,当存储在 DynamoDB 表中的数据产生改观(新增、修改、删除)时,关照到相干的处事 / 措施。好比我们修改了一笔记录的某个字段,DynamoDB 可以捕捉到这个字段的改观,并将改观前后的功效编写成一条流记录。

实践出真知

我们在行使一些开源框架或处事时总会碰着一些“坑”,这些“坑”着实也可以领略为没有很好的领略和应对它们的一些行使法则。DynamoDB 和全部处事一样,也有着它本身的行使法则。在这里首要分享我们在现实行使进程中碰着的题目以及办理步伐。

数据偏移

在 DynamoDB 中建设表时必要指定表的主键,这首要为了数据的独一性、可以或许快速索引、增进并行度。主键有两种范例,「单独行使分区键」作为主键和「行使分区键 + 排序键」作为主键,后者可以领略为组合主键(索引),它由两个字段独一确定 / 检索一条数据。DynamoDB 底层按照主键的值对数据举办分区存储,这样可以负载平衡,减轻单独分区压力,同时 DynamoDB 也会对主键值实行做“公道的”分区。

在开始我们没有对主键值做任那里理赏罚,由于 DynamoDB 会将分区键值作为内部散列函数的输入,其输出会抉择命据存储到详细的分区。但跟着运行,我们发明数据开始呈现写入偏移了,并且很是严峻,带来的效果就是导致 DynamoDB 表的读写机能降落,详细缘故起因在后头会做具体接头。发明这类题目之后,我们思量了两种办理步伐:

实践出真知,看我们怎样化解DynamoDB的挑衅

以是我们选择了第二种要领,调解营业代码,在写入时将主键值做哈希,查询时将主键前提做哈希举办查询。

自动扩容潜法则

在办理了数据偏移之后读 / 写机能规复了,可是运行了一段时刻之后读写机能却再次降落。查询了数据写入并不偏移,其时我们将写入机能晋升到了 6 万 +/ 秒,但没起到任何浸染,现实写入速率也就在 2 万 +/ 秒。最后发明是我们的分区数目太多了,DynamoDB 在靠山自动维护的分区数目已经到达了 200+ 个,严峻影响了 DynamoDB 表的读写机能。

DynamoDB 自动扩容、支持用户恣意设定的吞吐量,这些都是基于它的两个自动扩容法则:单分区巨细限定和读写机能限定。

单分区巨细限定

DynamoDB 会自动维护数据存储分区,但每个分区巨细上限为 10GB,一旦高出该限定会导致 DynamoDB 拆分区。这也正是数据偏移带来的影响,当数据严峻偏移时,DynamoDB 会冷静为你的偏移分区拆分区。我们可以按照下面的公式计较分区数目:

数据总巨细 / 10GB 再向上取整 = 分区总数

好比内外数据总量为 15GB,15 / 10 = 1.5,向上取整 = 2,分区数为 2,假如数据不偏移匀称分派的话两个分区每个存储 7.5GB 数据。

读写机能限定

DynamoDB 为什么要拆分区呢?由于它要担保用户预设的读 / 写机能。怎么担保呢?依赖将每个分区数据节制在 10G 以内。另一个前提就是当分区不能满意预设吞吐量时,DynamoDB 也会将分区举办扩充。DynamoDB 对付每个分区读写容量界说如下:

写入容量单元:写入容量单元(WCU:write capacity units),以每条数据最大 1KB 计较,最大每秒写入 1000 条。

读取容量单元:读取容量单元(RCU:read capacity units),以每条数据最大 4KB 计较,最大每秒读取 3000 条。

也就是说,一个分区的最大写入容量单元和读取容量单元是牢靠的,高出了分区最大容量单元就会拆分区。因此我们可以按照下面的公式计较分区数目:

(预设读容量 /3000)+(预设写容量 /1000)再向上取整 = 分区总数

好比预设的读取容量为 500,写入容量为 5000,(500 / 3000) + (5000 / 1000) = 5.1,再向上取整 = 6,分区数为 6。

必要留意的是,对付单分区高出 10G 拆分后的新分区是共享原分区读写容量的,并不是每个表单独的读写容量。

由于预设的读写容量抉择了分区数目,但因为单分区数据量到达上限而拆出两个新的分区。

以是当数据偏移严峻时,读写机能会急剧降落。

冷热数据

发生上面的题目是因为我们一开始是单表操纵。这样就算数据不偏移,但跟着时刻推移数据量越来越多,天然拆出的分区也越来越多。

因此,我们按照营业做了公道的拆表、设定了冷热数据表。这样做有两大甜头:

晋升机能:这一点按照上面的法则显而易见,热表中数据量不会一连无穷增添,因此分区也不变在必然数目级内,担保了读写机能。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读