实践出真知,看我们怎样化解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 拆分后的新分区是共享原分区读写容量的,并不是每个表单独的读写容量。 由于预设的读写容量抉择了分区数目,但因为单分区数据量到达上限而拆出两个新的分区。 以是当数据偏移严峻时,读写机能会急剧降落。 冷热数据 发生上面的题目是因为我们一开始是单表操纵。这样就算数据不偏移,但跟着时刻推移数据量越来越多,天然拆出的分区也越来越多。 因此,我们按照营业做了公道的拆表、设定了冷热数据表。这样做有两大甜头: 晋升机能:这一点按照上面的法则显而易见,热表中数据量不会一连无穷增添,因此分区也不变在必然数目级内,担保了读写机能。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |