0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

华为云数据库GaussDB (for Cassandra) 数据库治理 -- 大key与热key问题的检测与解决

IT科技苏辞 来源:IT科技苏辞 作者:IT科技苏辞 2022-12-01 21:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

华为云数据库GaussDB (for Cassandra)数据库治理 --大key与热key问题的检测与解决

Cassandra数据库是一个高度可扩展的高性能分布式数据库,面向大数据场景,可用于管理大量的结构化数据。在业务使用的过程中,随着业务量和数据流量的持续增长,往往一些业务的设计弊端逐渐暴露出来,降低了集群的稳定性和可用性。比如主键设计不合理,单个分区的记录数或数据量过大,出现超大分区键,引起了节点负载不均,集群稳定性会下降,这一类问题称为大key问题。当某一热点key的请求在某一主机上的访问。

Cassandra数据库是一个高度可扩展的高性能分布式数据库,面向大数据场景,可用于管理大量的结构化数据。在业务使用的过程中,随着业务量和数据流量的持续增长,往往一些业务的设计弊端逐渐暴露出来,降低了集群的稳定性和可用性。比如主键设计不合理,单个分区的记录数或数据量过大,出现超大分区键,引起了节点负载不均,集群稳定性会下降,这一类问题称为大key问题。当某一热点key的请求在某一主机上的访问超过server极限时,会导致热点Key问题的产生。往往大key是造成热key问题的间接原因。

GaussDB(for Cassandra)是一款基于华为自研的计算存储分离架构的分布式数据库,兼容Cassandra生态的云原生NoSQL数据库,支持类SQL语法CQL。在华为云高性能、高可用、高可靠、高安全、可弹性伸缩的基础上,提供了一键部署、快速备份恢复、计算存储独立扩容、监控告警等服务能力。针对以上问题,GaussDB(for Cassandra)提供了大key和热key的实时检测,以帮助业务进行合理的schema设计,规避业务稳定性风险。

大key的分析与解决

大key的产生,最主要的原因是主键设计不合理,使得单个分区的记录数或数据量过大。一旦某一个分区出现极大时,对该分区的访问,会造成分区所在server的负载变高,甚至造成节点OOM等。

针对大key问题,一般采取两种修复手段,一种是增加缓存,优化表结构。一种是基于现有分区键,增加分区键散列。对数据进行打散,避免单个分区的记录过大。GaussDB(for Cassandra)有如下整改事例,业务整改后负载平稳运行。

案例1

XX集群的数据量过大,导致集群存在大分区键(排查数量大概为2000+),最大的分区键达到38G。当业务频繁访问这部分大的分区键时,会导致节点持续高负载,影响业务请求成功率。

表结构如下

CREATE

TABLE

movie

(

  movieid
  appid
  uid
  accessstring
  moviename
  access_time
  

表设计分析

movie表保存了短视频的相关信息,分区键为movieid,并且保存了用户信息(uid),如果movieid是一个热门短视频,有几千万甚至上亿用户点赞此短视频,则该热门短视频所在的分区非常大(当前发现有38G)。

解决方法:

1.优化表结构

创建新表保存热门短视频信息,只保留短视频公共信息,不包含用户信息,确保该表不会产生大的分区键。热门短视频信息写入该表中。

CREATE

TABLE

hotmovieaccess

(

  movieid
  appid
  accessstring
  access_time
  

)

2.增加缓存

增加缓存,业务应用先从缓存中读取热门文件信息,没有查询到,则从数据库中查询,减少数据库查询次数。

整个优化逻辑如下:

poYBAGOIrUiAKF8hAAAkkE8zJrc295.png

1.先查缓存,当缓存存在,直接返回结果。

2.当缓存不存在,查询热门视频缓存(缓存不存在,则查询hot表),当视频为为热门视频时,查询hotmovieaccess表。

3.当hotmovieaccess表存在结果时,直接返回,当hotmovieaccess表不存在记录时,查询movie表。

4.并缓存查询结果。

案例2

movie_meta以月度建表,每个表只存当月的数据,初始的这种设计是可以减轻或规避分区键过大问题的。由于业务频繁写入,热门视频存储的记录非常多,还是形成了大的数据分区。

CREATE

TABLE

movie_meta202110

(

  path text
  moviename text
  movieid text
  create_time timestamp
  modify_mtime timestamp
  

)

解决办法:

新分区键增加一个随机数(0~999):将原来一个分区存储的信息随机离散存储到1000个分区中。

采用新的分区键之后,没有形成新超过100M的分区键,旧的超过100M的分区键数据,随着时间老化过期即可。

大key的定义与检测手段

通过长时间的业务观察,我们规定以下阈值,超过任何一个条件的阈值即为大key:

1.单个分区键的行数不能超过10万

2.单个分区的大小不超过100MB

GaussDB(for Cassandra)支持了大key的检测与告警。在CES界面,可以配置实例的大key告警。当发生大key事件时,会第一时间通知。及时整改,可避免业务波动。

pYYBAGOIrUGAc8IDAACj5r1vNMM903.png

热key的危害与解决

在日常生活中,经常会发生各种热门事件,应用中对该热点新闻进行上万次的点击浏览和评论时,会形成一个较大的请求量,这种情况下会造成短时间内对同一个key频繁操作,会导致key所在节点的CPU和load飙高,从而影响落在该节点的其他请求。导致业务成功率下降。诸如此类的还有热门商品促销,网红直播等场景,这些典型的读多写少的场景也会产生热点问题。

热key会造成以下危害:

1.流量集中,达到物理网卡上限。

2.请求过多,缓存分片服务被打垮。

3.DB击穿,引起业务雪崩。

GaussDB(for Cassandra)针对热key问题,常见的修复手段如下:

1.设计上需要考虑热key的问题,避免在数据库上产生热key

2.业务侧通过增加缓存来减少热key出现的情况下对数据库造成的冲击。考虑多级缓存解决热key问题(如Redis +本地二级缓存)

3.屏蔽热点key,比如在业务侧进行定制,支持热key黑白名单能力,可以将热key临时屏蔽。

热key的检测

我们定义访问频率 大于 100000次/min的key为热key。热key事件分为两种类型,一种时WRITES事件,代表写热点,一种是READS事件,表示读热点。

GaussDB(for Cassandra)也提供了热key的监测与告警。在CES界面,可以配置实例的热key告警。如下

pYYBAGOIrTGAevpTAACfEUEgJA8603.png

GaussDB(for Cassandra)提供了大key和热key的实时监控。确保第一时间感知业务风险。提供的大key和热key解决方案,在面对大数据量洪峰场景,增强了集群的稳定性与可用性。为客户业务持续稳定运行保驾护航。

综上,在线业务在使用Cassandra时,必须执行相关的开发规则和使用规范,在开发设计阶段就降低使用风险。一般按照 制定规范 -->接入评审 --> 定期巡检 -->优化规则 的治理流程进行。合理的设计一般会降低大部份风险发生的概率,对于应用来说,任何表的设计都要考虑是否会造成热key,大key的产生,是否会造成负载倾斜的问题;另外建立数据老化机制,表中的数据不能无限制的增长而不删除或者老化;针对读多写少的场景,要增加缓存机制,来应对读热点问题,并提升查询性能;对于每个PK以及每行Row的大小,要控制大小,否则将影响性能和稳定性。超出后要及时优化。

审核编辑黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 华为云
    +关注

    关注

    3

    文章

    2836

    浏览量

    19370
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NineData与阿里DMS:数据库权限申请、审批与回收场景怎么选?

    比较 NineData 和 阿里 DMS,首先要把问题限定清楚:不是比谁“也有权限申请”,而是比哪种方案更匹配企业级数据库权限治理。这个问题建议同时看五个维度:数据库资源粒度、审批闭
    的头像 发表于 03-25 17:19 1522次阅读
    NineData与阿里<b class='flag-5'>云</b>DMS:<b class='flag-5'>数据库</b>权限申请、审批与回收场景怎么选?

    Oracle数据库ASM实例无法挂载的数据恢复案例

    一个Oracle数据库故障表现为ASM磁盘组掉线,ASM实例无法挂载(mount)。数据库管理员自行进行简单修复,未能成功,随后联系北亚数据恢复中心恢复数据
    的头像 发表于 02-24 15:19 203次阅读
    Oracle<b class='flag-5'>数据库</b>ASM实例无法挂载的<b class='flag-5'>数据</b>恢复案例

    OpenTenBase核心贡献者分享开源数据库的破局之路

    “在开源数据库已成一片‘红海’的当下,单纯比拼‘快’或‘省’,已很难在开发者心中建立独特的护城河。”OpenTenBase核心贡献者、腾讯数据库专家工程师李晋钢这样阐述他对当前数据库
    的头像 发表于 12-29 14:00 547次阅读

    国产数据库的AI战事

    国产数据库硝烟再起,Vastbase V100构筑企业智能基座
    的头像 发表于 10-24 20:45 4398次阅读
    国产<b class='flag-5'>数据库</b>的AI战事

    mysql数据恢复—mysql数据库表被truncate的数据恢复案例

    ECS网站服务器,linux操作系统,部署了mysql数据库。工作人员在执行数据库版本更新测试时,错误地将本应在测试执行的sql脚本在生产
    的头像 发表于 09-11 09:28 1184次阅读
    mysql<b class='flag-5'>数据</b>恢复—mysql<b class='flag-5'>数据库</b>表被truncate的<b class='flag-5'>数据</b>恢复案例

    数据库性能优化指南

    作为一名在大厂摸爬滚打多年的运维老兵,我见过太多因为数据库性能问题导致的生产事故。今天分享一套完整的数据库优化方法论,从SQL层面到硬件配置,帮你彻底解决性能瓶颈!
    的头像 发表于 08-18 11:21 901次阅读

    数据库数据恢复—服务器异常断电导致Oracle数据库故障的数据恢复案例

    备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库
    的头像 发表于 07-24 11:12 842次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—服务器异常断电导致Oracle<b class='flag-5'>数据库</b>故障的<b class='flag-5'>数据</b>恢复案例

    三款主流国产数据库的技术特点

    随着数字经济的快速发展和数据安全要求的提升,国产数据库正迎来前所未有的发展机遇。在信创浪潮推动下,达梦数据库、TiDB、华为高斯数据库等国产
    的头像 发表于 07-14 11:08 1344次阅读

    数据库数据恢复—MongoDB数据库文件丢失的数据恢复案例

    MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍
    的头像 发表于 07-01 11:13 780次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—MongoDB<b class='flag-5'>数据库</b>文件丢失的<b class='flag-5'>数据</b>恢复案例

    数据库数据恢复—SQL Server数据库被加密如何恢复数据

    SQL Server数据库故障: SQL Server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。
    的头像 发表于 06-25 13:54 841次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—SQL Server<b class='flag-5'>数据库</b>被加密如何恢复<b class='flag-5'>数据</b>?

    达梦数据库常用管理SQL命令详解

    达梦数据库常用管理SQL命令详解
    的头像 发表于 06-17 15:12 7648次阅读
    达梦<b class='flag-5'>数据库</b>常用管理SQL命令详解

    oracle数据恢复—oracle数据库误执行错误truncate命令如何恢复数据

    oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据
    的头像 发表于 06-05 16:01 1787次阅读
    oracle<b class='flag-5'>数据</b>恢复—oracle<b class='flag-5'>数据库</b>误执行错误truncate命令如何恢复<b class='flag-5'>数据</b>?

    SQLSERVER数据库是什么

    SQL Server 是由微软公司开发的一款 关系型数据库管理系统(RDBMS) ,用于存储、管理和检索结构化数据。它是企业级应用中广泛使用的数据库解决方案之一,尤其适用于Windows平台,但也
    的头像 发表于 05-26 09:19 1300次阅读

    MySQL数据库是什么

    MySQL数据库是一种 开源的关系型数据库管理系统(RDBMS) ,由瑞典MySQL AB公司开发,后被Oracle公司收购。它通过结构化查询语言(SQL)进行数据存储、管理和操作,广泛应用于Web
    的头像 发表于 05-23 09:18 1449次阅读

    HarmonyOS5服务技术分享--数据库使用指南

    ? 华为数据库(CloudDB)在HarmonyOS中的使用指南 ? ​​嗨,开发者朋友们!​​ 今天咱们来聊聊华为
    发表于 05-22 18:29