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

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

发布时间:2019-10-22 15:56:15 所属栏目:建站 来源:咔咔侃技术
导读:副标题#e# 【大咖·来了 第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的挑战

所以我们选择了第二种方法,调整业务代码,在写入时将主键值做哈希,查询时将主键条件做哈希进行查询。

自动扩容潜规则

(编辑:西安站长网)

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

热点阅读