1.水平分割(分表):

例:QQ的登录表。假设QQ的用户有100亿,如果只有一张表,每个用户登录的时候数据库都要从这100亿中查找,会很慢很慢。如果将这一张表分成100份,每张表有1亿条,就小了很多,比如qq0,qq1,qq1…qq99表。

用户登录的时候,可以将用户的id%100,那么会得到0-99的数,查询表的时候,将表名qq跟取模的数连接起来,就构建了表名。比如123456789用户,取模的89,那么就到qq89表查询,查询的时间将会大大缩短。

这就是水平分割。

2.垂直分割(分库):

垂直分割指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。

例如学生答题表tt:有如下字段:

Id name 分数 题目 回答

其中题目和回答是比较大的字段,id name 分数比较小。

如果我们只想查询id为8的学生的分数:select 分数 from tt where id = 8;虽然知识查询分数,但是题目和回答这两个大字段也是要被扫描的,很消耗性能。但是我们只关心分数,并不想查询题目和回答。这就可以使用垂直分割。我们可以把题目单独放到一张表中,通过id与tt表建立一对一的关系,同样将回答单独放到一张表中。这样我们插叙tt中的分数的时候就不会扫描题目和回答了。

3.其他要点:

1)存放图片、文件等大文件用文件系统存储。数据库只存储路径,图片和文件存放在文件系统,甚至单独存放在一台服务器(图床)。

2)数据参数配置。

最重要的参数就是内存,我们主要用的innodb引擎,所以下面两个参数调的很大:

innodb_additional_mem_pool_size=64M

innodb_buffer_pool_size=1G

对于MyISAM,需要调整key_buffer_size,当然调整参数还是要看状态,用show status语句可以看到当前状态,以决定该调整哪些参数。

4.合理的硬件资源和操作系统

如果机器的内存超过4G,那么应当采用64位操作系统和64位MySQL。

案例:

简单购物系统暂设涉及如下表:

1.产品表(数据量10w,稳定)

2.订单表(数据量200w,且有增长趋势)

3.用户表 (数据量100w,且有增长趋势)

以mysql为例讲述下水平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万

垂直拆分:

解决问题:

表与表之间的io竞争

不解决问题:

单表中数据量增长出现的压力

方案:

把产品表和用户表放到一个server上

订单表单独放到一个server上

水平拆分:

解决问题:

单表中数据量增长出现的压力

不解决问题:

表与表之间的io争夺

方案:

用户表通过性别拆分为男用户表和女用户表

订单表通过已完成和完成中拆分为已完成订单和未完成订单

产品表 未完成订单放一个server上

已完成订单表盒男用户表放一个server上

女用户表放一个server上

转自:https://www.2cto.com/database/201709/676637.html

解决数据库高并发的一种方案——分库分表相关推荐

  1. 大厂二面:应对千亿级高并发场景,MySQL如何分库分表?

    前几天参加了一个大数据领域的内部分享会,不少大佬回首自己的进阶历程,无一不提到需要玩转"MySQL"这门技术. 可能,你以为的面试题,只是这样的: MySQL为什么采用B+树索引结 ...

  2. 解决数据库高并发的常见方案

    解决数据库高并发的常见方案: 1) 缓存式的 Web 应用程序架构: 在 Web 层和 DB(数据库)层之间加一层 cache 层,主要目的:减少数据库读取负担,提高数 据读取速度.cache 存取的 ...

  3. python访问数据库如何解决高并发_怎样解决数据库高并发的问题

    怎样解决数据库高并发的问题?解决数据库高并发使用缓存式的Web应用程序架构.增加Redis缓存数据库.增加数据库索引.页面静态化.使用存储过程.MySQL主从读写分离.分表分库.负载均衡集群. 解决数 ...

  4. 如何解决数据库高并发?

    发生数据库高并发问题主要在用户访问量增加,例如以下场景:定时秒杀活动,大范围的同一时间段的抢红包活动(支付宝的新年集字领红包等) 数据库高并发的问题本质在于:一个是慢,一个是等 而要解决慢和等可以从以 ...

  5. 利用Memcache解决数据库高并发访问的瓶颈问题

    from:http://www.jizhuomi.com/software/317.html 对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单 ...

  6. mysql sharding 方案_mysql sharding 方案 分库分表(sharding)系列(4)

    图1. Sharding实现层面与相关框架/产品 在DAO层实现 当团队决定自行实现sharding的时候,DAO层可能是嵌入sharding逻辑的首选位置,因为在这个层面上,每一个DAO的方法都明确 ...

  7. MySQL数据库怎么进行分库分表?

    ▲ 点击上方"分布式实验室"关注公众号 回复"1"抽取纸质技术书 提起分库分表,对于大部分服务器开发来说,其实并不是一个新鲜的名词.随着业务的发展,我们表中的数 ...

  8. 数据库读写分离与分库分表

    3.1 读写分离(主要是为了数据库读能力的水平扩展) 3.1.1 读写分离概念 单台mysql实例情况下不能支持短时间内大量的对数据库的读操作,所以会将数据库配置成集群,一个master(主库).多个 ...

  9. Mysql数据库数据拆分之分库分表总结

    Mysql数据库分库和分表方式,涉及到mysql数据库相关知识,对mysql数据库分库分表相关知识感兴趣的朋友一起学习吧 分库 场景: 分表能够解决单表数据量过大带来的查询效率下降的问题,但是,却无法 ...

最新文章

  1. Matlab编程与数据类型 -- 文本M文件
  2. 自学python有用吗-文科专业自学python有用吗?
  3. 计算机弹出错误字,电脑蓝屏,并且屏幕上出现这样的文字该怎么解决?
  4. 【双100%提交】剑指 Offer 09. 用两个栈实现队列
  5. ABP VNext从单体切换到微服务
  6. bool类型数组转换成一个整数_Go 学习笔记 02 | 基本数据类型以及 byte 和 rune 类型...
  7. 百度实习生前端面试面经
  8. Redux入门教程(快速上手)_day_01
  9. centos6.0 LAMP源码安装
  10. 驱动精灵w8ndows xp sp2,独家率先支持Win8 驱动精灵2011 SP2发布
  11. 在windows 2003 中,启动SQL Server 2000 提示“没有找到MSVCR71.dll因此这个应用程序未能启动”
  12. mysql 之 增删改查
  13. 555555555555555555555
  14. php yii 微信支付宝,Yii使用easywechat实现微信支付
  15. Decorate(修饰模式)
  16. HDU - 7047 - Link with Balls ( 插板法 + 组合数 )
  17. DXP的使用及绘制PCB
  18. 转:分享 OS X 10.7-10.11 最终版镜像,DMG 格式
  19. Vue全家桶(前后端完全分离)
  20. 计组(COA) Programming1: 整数和二进制补码、整数和NBCD码、浮点数(float)和二进制码(IEEE 754)的相互转换。

热门文章

  1. Ransac EPnP
  2. RDS服务详细讲解(IT枫斗者)
  3. tx1开发板可以装linux,Jetson TX1嵌入式开发板被Nvidia推出,发力深度学习
  4. 对讲机使用过程中的常见故障及排除故障的解决方法
  5. 今日直播|Kafka-on-Pulsar Meetup:新浪微博、中国移动实践分享
  6. 胶济车殇十二幸存者忆翻车一刻 有人折断手臂求生
  7. [转载]点阵图(位图)与矢量图的区别
  8. 亲身使用分享:红米k30s至尊纪念版散热怎么样-红米k30s至尊纪念版缺点
  9. 微信小程序生成URL Scheme
  10. 码易应用商城入驻流程