美文网首页
mysql & 分库分表

mysql & 分库分表

作者: 365_9163 | 来源:发表于2020-09-02 14:22 被阅读0次

分库分表

单表中出现了百万甚至千万级别的数据,增删改查的开销也会越来越大,加上物理服务器资源有限,最终数据库承载的数据量和数据处理能力都将遇到瓶颈。

分库分表的设计,目的为了缓解数据库的压力,最大限度提高数据操作的效率。

数据分表:

    单表的数据量过大,操作表的时候就会加大系统的开销,每次查询会消耗数据库大量资源,多表联合查询情况下,这种劣势更加明显,mysql对插入数据的时候 会对表进行锁表操作,表锁定或者行锁定。无论哪种方式,都意味着前面一条数据操作表或者行的时候,后面的请求都在排队,访问量增加的时候都会影响数据库的效率。

一般来说 mysql数据库单表记录最好控制在500万条。

垂直分表:

    根据业务把一个表中的字段(field)分到不同的表中;这些被分出去的业务通常根据业务需要,例如一些不常用的字段,一些长度较长的字段。

 一般被拆分的表的字段比较多,主要避免查询的时候出现因为数据量大而造成的跨页问题。

水平分表:

    将一个表中的数据,按照关键字(id)对一个具体的数字取模,得到的余数就是需要存放到的新表的位置。

分库

每一个物理数据库支持数据都是有限的,每一次的数据库请求都会产生一次数据库连接,当一个库无法支持更多访问时,把原来的单个库分成多个,帮助分担压力。

可以根据具体场景进行划分:业务不同分库 ,根据冷热数据进行分库,数据访问频率,根据访问数据的地域和时间范围进行划分。

分布式事务原理:

    有时候业务代码可能会同时访问两个不同的数据库,做不同的操作,同时这两个操作有可能放在同一个事务中处理。

这里引出了分布式系统的cap理论:

一致性 (consistency):分布式系统中的所有数据,同一时刻有着相同的值。

        业务代码将数据A写入库01,01把A同步给02数据库,业务代码从02中读取出记录也是A,那么这两个数据库存放的数据就是一致的。

可用性(Avalibability):分布式系统中一部份节点出现故障,分布式系统仍旧可以响应用户的请求。

        数据库01和02同时存放记录A,数据库01挂掉,业务代码可以继续从02获取记录A,也就是在节点出现问题的时候,还保证数据的可用性。

分区容错性(Partition tolerance):两个数据库节点分别在两个区,而两个区的通讯发生了问题,就不能达成数据一致,这就是分区的情况,我们就需要从C和A中做出选择。

        是选择可用性A,获取其中一个区的数据,还是选择一致性C,等待两个区的数据同步了再去获取数据。

CAP只能同时满足其中两个CP或者AP;


                                                                                                                                                                                                            

相关文章

  • Mysql的分库分表,水平拆分-垂直拆分

    参考文章MySQL分库分表总结参考数据库分库分表策略,如何分库,如何分表?MySQL分库分表原理 MySQL单库数...

  • 分库分表

    【分库、分表】MySQL分库分表方案 - MrSunny - 博客园 总结下Mysql分表分库的策略及应用 - 周...

  • mysql优化

    Mysql分库分表方案 Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时...

  • MYSQL分库分表

    大众点评订单系统分库分表实践 利用Mycat中间件实现RDS MySQL的分库分表及读写分离功能 MYSQL数...

  • (转载)MySQL数据库之互联网常用分库分表方案

    MySQL数据库之互联网常用分库分表方案 一、数据库瓶颈 1、IO瓶颈 2、CPU瓶颈 二、分库分表 1、水平分库...

  • 面试必备:我们为什么要分库分表?

    目录 什么是分库分表 为什么需要分库分表呢 如何分库分表 什么时候开始考虑分库分表 分库分表会导致哪些问题 分库分...

  • 浅谈mysql数据库分库分表那些事-亿级数据存储方案

    一、概述 mysql分库分表一般有如下场景 垂直分表(将表分为主表和扩展表) 垂直分库(将表按业务归属到不同的库,...

  • mysql分库分表

    1、shard表查询必须带shardingkey 2、explain select * from table wh...

  • MySQL分库分表

    一、什么是数据切分"Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线...

  • MySQL分库分表

    1 分库分表之MyCat实现 1.1 分库分表介绍 前提:当你们的数据库表数据特别大时,比如说上亿的记录,数据库本...

网友评论

      本文标题:mysql & 分库分表

      本文链接:https://www.haomeiwen.com/subject/owlnsktx.html