mysql 横向分表合并_MySQL横向扩展-分库分表解决方案总结

从业务场景看分库分表

互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要求。

因此,量级较大的业务场景,MySQL的读压力往往会首先成为系统瓶颈所在。

此时,在数据库层面,DBA通常会建议通过横向扩展备库节点的方式,采用读写分离技术来提升业务系统的读性能、读并发能力。

以上是典型的互联网读写分离需求。

除了这种多见的读瓶颈问题,在大型网站和海量数据的业务场景,数据库常见的性能瓶颈下面的两地问题会更加突出:

一是大量的并发读写操作,导致单库出现负载压力过大;

二是单表存储数据量过大,导致查询效率低下。

该种情况,由于业务的读写请求较高,MySQL在主从之间的数据同步容易引发主从延迟问题。改进的做法是,我们可能会架构设计上,需要敦促业务在写入主库之前最好将同一份数据落到缓存,以避免高并发场景下从从库中获取不到指定数据的情况发生。

如果写压力进一步扩大,并且数据量急剧快速增长,DB写节点即主库就会成为整个系统的瓶颈。在MySQL的日常运营中,如果DB中表和表之间的数据很多是没有关系的,或者根本不需要表关联Join操作,我们可以考虑按照业务把不同的数据放到不同的服务器中,即垂直分库或叫垂直切分。

不过需要注意的是,垂直分库无法解决单表数据量过大的问题,由于单一业务的数据信息仍然落盘在单表中,如果单表数据量太大,就会极大地影响SQL执行的性能。

由此,在MySQL应用领域,水平分表也是互联网场景应对高并发、单表数据量过大的解决方案之一。

分表在本质上可以概括为业务表在逻辑上公用一个路由结构,物理上分散存储。这就是常说的Sharding分片或者分区。

比如以用户ID字段user_id按照一定策略(hash、range等),将表中数据拆分到多个子表中(分片或分区),以确保子表中数据量在读写性能可接受的范围内。每个子表的结构都一样,每个表的数据都不一样,没有交集,所有表的并集是全量数据。

水平分表主要用于业务架构无法继续垂直细分、数据库中单张表数据量太大、查询性能下降的场景。

应该使用哪一种方式来实施数据库分库分表,需要从数据库的瓶颈所在和项目的业务角度进行综合考虑。如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、耦合度较低,建议优先使用垂直切分。

如果数据库中的表并不多,但单表的数据量很大且数据热度很高,这种情况之下就应该选择水平切分。

在现实项目中,往往是这两种情况兼而有之,综合使用了垂直与水平切分,我们首先对数据库进行垂直切分,然后针对一部分表进行水平切分。

但是,采用分库分表也会引入新的问题。

分库分表存在的问题及注意点

l跨库Join问题

分库分表后,表之间的关联操作将受到限制,无法join位于不同分库的表,也无法join分表粒度不同的表,结果导致原本一次查询能够完成的业务可能需要多次查询才能完成。

因此,分库分表的设计,需要结合业务数据的关联场景,适当考虑数据的冗余和拆分策略。比如:根据之前表之间的关系,将相关表以相同的拆分策略,确保关联数据存放到一个分片上。或者使用表级冗余将基础数据在所有库都写一份。使用字段冗余:把需要join的字段冗余在各个表中,这样有些字段就不用join去查询了。再者就是在应用逻辑层进行数据组装:将原来的请求分两次查询,在第一次查询的结果集中找出关联数据id,然后根据id发起第二次请求得到关联数据,最后将获得到的数据进行字段拼装。

l 排序合并问题

由于数据的分库、分片导致的分散存储,原来的业务请求会引发结果集合并、排序问题。尤其是当排序字段不是分片字段的似乎,问题会变得比更加复杂。

需要先在不同的分片节点中将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序,最终返回给用户。

因此,分库分表,还需要考虑业务具体的排序场景,尽量保障排序字段和分布键一致,确保请求通过分片规则就比较容易定位到指定的分片。

l 迁移和扩容问题

迁移和扩容,属于DB日常运营中常规场景。分库分表后,如果数据采用的是数值范围range分片,那么我们只需要添加节点就可以进行扩容;但如果采用的是数值hash取模分片,由于扩容涉及数据重分布过程,扩容相对比较麻烦。

所以,分库分表,需要根据业务当前、预期的数据量、QPS来进行容量规划,推算

出大概需要多少分片,尽量减少后续扩容及迁移的发生。

l分布式事务问题

由于分库分表之后,业务需要跨库跨分片进行SQL请求,类似分布式事务的问题就会出现。为了确保事务的原子性,事务的提交需要协调多个节点,加大事务的执行时间及复杂性。

因此,对于性能要求很高,但对一致性要求不高的系统,在分库分表设计的实时候可能需要采用事务补偿的方式,将实时一致性转化为最终一致性,结合业务系统比如对数据进行对账检查、基于日志进行对比等进行事后补偿。

总 结

分库分表作为一种横向扩展的解决方案,问题还是比较明显的:

从运维侧来看:会极大的加大系统的复杂度、运维成本相对较高;

从业务侧来看:会极大增加开发编码工作量,并使业务逻辑复杂化。

所以,如果无需分片,则尽量避免分库分表;如果确实到了需要分库分表的情况,相对分库分表的通用方案,如果采用分布式中间件或原生分布式数据库,业务侧无需花大量的工作来处理如何分片和分片后的问题,有更多的时间原本该是专注于业务的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年春季 0089-22DInternet和Intranet应用 参考试题

编号:0089 17-18学年第1学期期末考试 Internet和Intranet应用 试题答案 一、填空题:(每空4分,共40分) 1.网络接口层  网际网层  传输层  应用层 2.路由器(或网关)  目的主机 3&#xff…

家用、商用、工业交换机的用途与区别

以太网交换机一般分为:商用(以太网)交换机、工业(以太网)交换机、家用(以太网)交换机。那么,家用交换机,商业交换机,工业交换机之间有什么区别呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧! 商用…

【渝粤教育】国家开放大学2018年春季 0105-22T酒店营销实务 参考试题

科目编号:0105 座位号 2017年度第二学期期末考试 酒店营销实务 试题 2018年7月 一、名词解释:(每题5分,共20分) 酒店广告: 酒店市场细分: 3.市场调查: 目标市场&…

【渝粤教育】国家开放大学2018年春季 0176-22T电机学(一) 参考试题

编号: 0176 2017-2018年度第二学期期末考试 电机学(1) 试 题 2018年 7 月 一、填空题(每空4分,共40分) 1.一台变压器,加额定电压时,主磁通为Φ,空载电流为I…

python中dump用法_python中json庫中的load、loads、dump、dumps的區別與用法

一、json.dumps(i):json中的dumps方法是用來將特定格式的數據進行字符串化的操作,比如列表字典都可以進行字符串化操作然后寫入json的file;而且如果是要寫入json文件就必須要進行dumps操作;二、json.dump():和dumps差一個s&#x…

监控POE供电交换机最大传输距离有多远?

经常有朋友问到关于POE供电技术的问题,比如说POE供电最大传输距离是多远?其实,PoE最大传输距离的问题,先要弄清楚决定最大距离的关键因素是什么。事实上,用标准以太网线缆(双绞线)传输直流电是可以传输很远的,这个距离…

【渝粤教育】国家开放大学2018年春季 0233-21T学前儿童语言教育 参考试题

试卷编号:0233 2017——2018学年度第二学期期末考试 学前儿童语言教育 2018年7月 1.前语言阶段,儿童发展了三方面能力,即前语言 、前语言 和前语言 。 2. 和 ,这是儿童学话中的关键的两步,因为语言基本的奥秘已开始渗…

aop 代码_项目学生:使用AOP简化代码

aop 代码这是Project Student的一部分。 许多人坚信方法应适合您的编辑器窗口(例如20行),而有些人认为方法应小于此范围。 这个想法是一种方法应该做一件事,而只能做一件事。 如果它做的还不止于此,则应将其分解为多种…

【渝粤教育】国家开放大学2018年春季 0269-21T文学概论 参考试题

试卷代号:0269 2017-2018年度第二学期考试 文学概论试题 2018年7月 一、选择题(请在下面的答题框内写上正确答案的序号)(每小题3分,共30分) 1. 在研究长篇小说的文体语言的时候,俄国学者____…

HDMI视频光端机常见故障问题及解决方法

HDMI光端机就是光信号传输的终端设备,在广泛领域应用中,往往需要把HDMI信号源输送远处进行处理。最为突出的问题有:远处接收到的信号出现偏色、模糊,信号产生重影和拖尾及网纹干扰。那么,我们在使用HDMI视频光端机时常…

【渝粤教育】国家开放大学2018年春季 0299-22T中国古代文学(1) 参考试题

试卷编号:0299 座位号 2017—2018学年度第2学期期末考试 中国古代文学(1)试题(闭卷) 2018年5月 1.枚乘的《 》是汉赋发展史上一篇带有转折性的作品。 2. 汉代两位最杰出的史学家是 、 。他们的史学著作里的许多人物传记是传记散文的杰作。 …

将Spring Boot应用程序部署到Tomcat中

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 部署应用程序很困难。 通常,您需要控制台访问服务器,从服务器…

【渝粤教育】国家开放大学2018年春季 0463-22T英语语音 参考试题

科目编号:0463 座位号: 2017─2018学年度第二学期期末考试 英语语音笔试题 (开卷) 2018年7月 根据读音规则为下列单词注音 (10分) Saturday 2. notify demand 4. country 5. answer 6. police pronounce 8. magazine popular…

python读取excel写入mysql pandas_python pandas 读取文件 写入文件excel

读取数据import pandas as pdimport collectionsdef readLocationCodeForExcel():read_file r"test.xlsx"sheet_names {"库位码","地堆码"}sheet_data pd.ExcelFile(read_file) #读取sheet数据#sheet列表read_sheet_data sheet_data.sheet_n…

【渝粤教育】国家开放大学2018年春季 0553-21T色彩 参考试题

编号:0553 座位号: 2017~2018学年度第二学期期末考试 色彩试题 2018年7月 色彩写生画(100分) 题目:水粉色彩静物写生。 静物:由10件不同造型、色调、质感的静物组合并配置衬布 红色花瓶、鲜花一…

HD-SDI光端机是什么?其性能特点和技术参数有哪些?

HD-SDI光端机是将SDI信号与光信号互相转换的设备。SDI光端机的原理是发送端将SDI信号通过激光器调制后变为光信号,接收端将激光二极管收到的数据再编码为SDI信号。那么,HD-SDI光端机是什么呢?其性能特点和技术参数有哪些呢?接下来我们就跟随飞…

【渝粤教育】国家开放大学2018年春季 0609-21T中级财务会计(1) 参考试题

科目编号:0609 座位号 2017-2018学年度第二学期期末考试 中级财务会计(1) 试题 2018年 7 月 一、单选题(本大题共10小题,每小题3分,共计30分) (★请考生务必将答案填入到下面对应序…

flask查询mysql数据展示_flask下直接展示mysql数据库 字段

from flask importFlask,request,render_templatefrom flask_sqlalchemy importSQLAlchemyapp Flask(__name__)app.config[SQLALCHEMY_DATABASE_URI] sqlite:///test.db #这里用这个是不行的 注意修改为mysql 才可以…

jersey spring_实施Jersey 2 Spring集成

jersey springJersey是Oracle提供的出色的Java JAX-RS规范参考实现。 去年,当我们开始为大容量网站构建RESTful后端Web服务时,我们选择使用JAX-RS API作为我们的REST框架和Spring框架来进行依赖项注入。 泽西岛是我们选择的JAX-RS实现。 项目启动时&…

【渝粤教育】国家开放大学2018年春季 0688-21T老年精神障碍护理 参考试题

编号:0688 座位号 2017~2018学年度第二学期期末考试 老年精神障碍护理(开卷)试题 2018年 5月 名词解释(每题5分,共30分,) 1、器质性精神障碍 2、谵妄 3、遗忘综合征 4、器质性幻觉症 5、老…