热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL性能扩展的架构优化方案(三)

这是学习笔记的第 1816篇文章在前几天分享过一个小系列的文章。在后续也做了跟进和补充,从最初的方案到最后的落地,今天总算是做了一个初步的了结。上次聊到关于一个密集型写入的MySQ

这是学习笔记的第 1816篇文章


在前几天分享过一个小系列的文章。



在后续也做了跟进和补充,从最初的方案到最后的落地,今天总算是做了一个初步的了结。

上次聊到关于一个密集型写入的MySQL业务,通过读写分离完成了写入和统计的负载均衡,初步解决了写入的问题,但是统计的问题就开始日趋严重。

严重到整个从库的负载开始难以满足业务的需求,到最后无法满足。

MySQL性能扩展的架构优化方案(三)

这部分的主要瓶颈在IO层面。主要是因为大量的统计语句导致。

在和业务同学讨论的过程中,其实使用Redis方向是一个相对合适的技术方向,对于统计的支持力度还是不错的,但是限于存储成本和程序改造的工作量,业务更倾向于暂时按照已有的方案,通过对比infobright的统计优势和MySQL的协议兼容性,从而得出在目前的情况下选择这种方案是一个比较快捷高效的方案。

在具体落地的过程中,发现有一大堆的事情需要提前搞定。 

比如第一个头疼的问题就是全量的同步,第一次同步肯定是全量的,这么多的数据怎么同步到infobright里面。 

第二个问题随之而来,也是更为关键的,那就是同步策略是怎么设定的,是否可以支持的更加灵活。

第三个问题是基于现有的增量同步方案,需要在时间字段上添加索引。对于线上的操作而言又是一个巨大的挑战。

从目前的业务需求来说,最多能够允许一个小时的统计延迟,如果后期要做大量的运营活动,需要更精确的数据支持,要得到半个小时的统计数据,按照现有的方案是否能够支持。 

这两个主要的问题,任何一个解决不了,数据流转能够落地都是难题,这个问题留给我的时间只有一天。所以我准备把前期的准备和测试做得扎实一些,后期接入的时候就会顺畅得多。 

部分脚本实现如下:


echo  $1 $2
#tab_name=$1
starttime=$1
endtime=$2
/usr/local/mysql/bin/mysql -udba_admin -pDxxxx -h127.0.0.1 -P4306
-Ne "select table_name from information_schema.tables where table_schema='testdata'
and table_name like 'receipt_%' order by table_rows ;"
>/tmp/tablst

function data_sync_to_infobright
{
#rm  /tmp/a.csv
echo "export data...start "`date`
/usr/local/mysql/bin/mysql -udba_admin -pDxxxx -h127.0.0.1 -P4306 <select *from testdata.${tab_name} where create_time between '$2' and '$3'  into outfile '/data/dump_data/${tab_name}.csv' FIELDS TERMINATED BY ' ' ENCLOSED BY '\"';
EOF

echo "export data...done "`date`

echo "load data...start "`date`
/usr/local/mysql/bin/mysql -umsg_data_sync -pxxxx -h10.x.2.0 -P5029 <CREATE TABLE if not exists testdata.${tab_name} (
id int(11) NOT NULL COMMENT '自增主键',
userid int(11) NOT NULL DEFAULT '0' COMMENT '用户ID',
action int(11) NOT NULL DEFAULT '0' COMMENT '动作',
readtimes int(11) NOT NULL DEFAULT '0' COMMENT '阅读次数',
create_time datetime NOT NULL COMMENT '创建时间'
) COMMENT='广播回执接收明细';

load data local infile '/data/dump_data/${tab_name}.csv' into table testdata.${tab_name} FIELDS TERMINATED BY ' ' ENCLOSED BY '"';

EOF

echo "load data...done "`date`
rm -f /data/dump_data/${tab_name}.csv
}

while read line
do
echo $tab_name "$starttime"  "$endtime"
 tab_name=`echo $line|awk '{print $1}'`
data_sync_to_infobright $tab_name "$starttime" "$endtime"
done echo $endtime >/tmp/end_time

脚本的输入参数有两个,一个是起始时间,一个是截止时间。第一次全量同步的时候,可以把起始时间给的很早,这样截止时间是固定的,对于整个脚本的结构来说就不需要做大的变化了。 另外全量同步的时候一定要确保主从延迟已经最低或者暂时停掉查询业务,使得数据全量抽取更加顺利。

考虑到每天落盘的数据量大概在10G左右,日志量在30G左右,所以考虑先使用客户端导入infobright的方式来操作。

从实践来看,涉及的表有600多个,我先导出了一个列表,按照数据量来排序,这样小表就可以快速导入,大表放在最后,整个数据量有150G左右,通过网络传输导入infobright,从导出到导入完成,这个过程大概需要1个小时。

而导入数据到infobright之后的性能提升也是极为明显的。原来的一组查询持续时间在半个小时,现在在70秒钟即可完成。对于业务的体验来说大大提高。完成了第一次同步之后,后续的同步都可以根据实际的情况来灵活控制。所以数据增量同步暂时是手动挡控制。 

从整个数据架构分离之后的效果来看,从库的压力大大降低,而效率也大大提高。

MySQL性能扩展的架构优化方案(三)



推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • Vue3中setup函数的参数props和context配置详解
    本文详细介绍了Vue3中setup函数的参数props和context的配置方法,包括props的接收和配置声明,以及未通过props进行接收配置时的输出值。同时还介绍了父组件传递给子组件的值和模板的相关内容。阅读本文后,读者将对Vue3中setup函数的参数props和context的配置有更深入的理解。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
author-avatar
手机用户2502918445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有