加入收藏 | 设为首页 | 会员中心 | 我要投稿 柳州站长网 (https://www.0772zz.cn/)- 基础存储、数据迁移、云安全、数据计算、数据湖!
当前位置: 首页 > 云计算 > 正文

数亿数据MySQL撑不住,无缝迁移到MongoDB后稳得一批!

发布时间:2022-08-02 14:52:45 所属栏目:云计算 来源:互联网
导读:一、问题 在好大夫在线内部,S3系统负责各业务方操作日志的集中存储、查询和管理。目前,该系统日均查询量数千万次,插入量数十万次。随着日志量的不断累积,主表已经达到数十亿,单表占用磁盘空间400G+。S3是业务早期就存在的系统,当时为了简单快速落地,
   一、问题
  在好大夫在线内部,S3系统负责各业务方操作日志的集中存储、查询和管理。目前,该系统日均查询量数千万次,插入量数十万次。随着日志量的不断累积,主表已经达到数十亿,单表占用磁盘空间400G+。S3是业务早期就存在的系统,当时为了简单快速落地,使用了Mysql来存储,随着业务的不断增长,同时也要兼顾性能和可扩展性,到了必须要重新选型的时候了。
 
  新项目命名为:LogStore。
 
  二、目标
  ​1、安全性
  S3系统在设计之初,没有按业务系统考虑数据隔离,而是直接采用 key(系统 + 类名 + id) + 有限固定字段 + 序列化value 的方式进行存储,这种方式显然不便于后续集群拆分和管理。LogStore系统要在逻辑上进行数据区域划分,业务方在接入时要指定app进行必要的权限验证,以区分不同业务数据,进而再进行插入和查询操作。
 
  ​2、通用性
  S3主要提供一种3层结构,采用MySQL固定字段进行存储,这就不可避免地会造成字段空间的浪费。LogStore系统需要提供一种通用的日志存储格式,由业务方自行规定字段含义,并且保留一定程度的可查询维度。
 
  ​3、高性能
  S3系统的QPS在300+,单条数据最大1KB左右。LogStore系统要支持当前QPS 10倍以上的写入和读取速度。
 
  ​4、可审计
  要满足内部安全审计的要求,LogStore系统不提供对数据的更新,只允许数据的插入和查询。
 
  ​5、易拓展
  LogStore系统以及底层存储要满足可扩展特性,可以在线扩容,满足公司未来5年甚至更长时间的日志存储需求,并且要最大化节省磁盘空间。
 
  三、方案选型
  为了达成改造目标,本次调研了四种存储改造方案,各种方案对比如下:
 
  
 
  ​1、我们不合适—分库分表
  分库分表主要分为应用层依赖类中间件和代理中间件,无论哪种均需要修改现有PHP和Java框架,同时对DBA管理数据也带来一定的操作困难。为了降低架构复杂度,架构团队否定了引入DB中间件的方案,还是要求运维简单、成本低的方案。
 
  ​2、我们不合适—TiDB
  TiDB也曾一度进入了我们重点调研对象,只是由于目前公司的DB生态主要还是在MGR、MongoDB、MySQL上,在可预见的需求中,也没有能充分发挥TiDB的场景,所以就暂时搁置了。
 
  ​3、我们不合适—ElasticSearch
  ELK-stack提供的套件确实让ES很有吸引力,公司用ES集群也有较长时间了。ES优势在于检索和数据分析领域,也正是因为其检索和分析的功能的强大,无论写入、查询和存储成本都比较高,在日志处理的这个场景下,性价比略低,所以也被pass了。
 
  ​4、适合的选择—MongoDB
  业务操作日志读多写少,很适合文档型数据库MongoDB的特点。同时,MongoDB在业界得到了广泛的使用,公司也有很多业务在使用,在MongoDB上积累了一定的运维经验,最终决定选择MongoDB作为新日志系统存储方案。
 
  四、性能测试
  为了验证MongoDB的性能能否达到要求,我们搭建了MongoDB集群,机器配置、架构图和测试结果如下:
 
  ​1、机器配置
  MongoDB集群3台机器配置如下:
 
  
 
  ​2、架构图
  
 
  ​3、测试场景
  本次MongoDB测试采用YCSB(https://github.com/brianfrankcooper/YCSB)性能测试工具,ycsb的workloads目录下保存了6种不同的workload类型,代表了不同的压测负载类型,本次我们只用到了其中5种,具体场景和测试结果如下。
 
  
 
  1) 插入平均文档大小为5K,数据量为100万,并发100,数据量总共5.265G 左右,执行的时间以及磁盘压力
 
  结论:插入100w数据,总耗时219s,平均 insert 耗时21.8ms,吞吐量 4568/s
 
  2) 测试90%读,10%更新,并发100的场景
 
  结论:总耗时236s,read 平均耗时23.6ms, update 平均耗时23.56ms,吞吐量达到 4225/s
 
  3) 测试读多写少,100%读 ,并发100的场景
 
  结论:总耗时123s,平均read 耗时12.3ms,吞吐量达到8090/s
 
  4) 测试读多写少,90%读,10%插入,并发100的场景
 
  结论:总耗时220s,read 平均耗时 21.9ms,insert 平均耗时21.9ms,吞吐量达到4541/s
 
  5) 测试混合读写,50%读,25%插入、25%更新,并发100的场景
 
  结论:总耗时267s,read 平均耗时26.7ms,update  平均耗时26.7ms,insert  平均耗时26.6ms ,吞吐量 为3739/s

(编辑:柳州站长网)

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

    热点阅读