场景分析

  • Web开发工作,亦或是海量数据开发工作,学习分库、分表、分区等知识都是很有必要的 。
  • 面试的时候,也有可能也会被问到。不过作为一个有经验的Coder,不熟悉分库、分表技术确实有些 low。

基础概念

  • 分表,能够解决单表数据量过大带来的查询效率下降的问题;
  • 分库,面对高并发的读写访问,当数据库master服务器无法承载写操作压力时,不管如何扩展slave服务器,此时都没有意义。此时,则需要通过数据分库策略,提高数据库并发访问能力。
  • 优点,分库、分表技术优化了数据存储方式,有效减小数据库服务器的负担、缩短查询响应时间。

  • 数据分库、分表存储场景条件

    • 关系型数据库
    • 主从架构(master-slave)
    • 单表数据量在百万、千万级别
    • 数据库面临极高的并发访问
  • 分库、分表实现策略

    • 关键字取模,实现对数据访问进行路由。

分库

  • 举例

    • 按功能分

      • 用户类库、商品类库、订单类库、日志类库等
    • 按地区分
      • 每个城市或省市一个同样的库,如: db_click_bj、db_click_sh 等

横向/水平分表: 解决 表记录太大问题

  • 主要解决问题

    • 单表过大造成的性能问题;
    • 单表过大造成的单服务器空间问题。
  • 按某个字段分

    • 如:将用户资料附件表分成3个附件分表pre_forum_attachment_[0|1|2],和1个附件索引表(存储tid和附件id关系),根据tid最后一位判断附件保存在哪个分表中。
  • 按日期分表
    • 日志类、统计类数据表按年、月、日、周分表。如:点击量统计click_201801、click_201802
  • 通过MySQL的merge存储引擎实现
    • 需要创建分表、总表,总表需要merge存储引擎。

      • 示例代码
create table log_merge (
dt datetime not null,
info varchar (100) not null,index (dt)
) engine = merge
union= (log_2017,log_2018) insert_method = last;

纵向/垂直分表 : 解决 列过多问题

  • 纵向分表常见的方式有根据活跃度分表、根据重要性分表等。
  • 主要解决问题

    • 表与表之间资源争用问题;
    • 锁争用机率小;
    • 实现核心与非核心的分级存储,如UDB登陆库拆分成一级二级三级库;
    • 数据库同步压力问题。
  • 具体策略

    • 经常组合查询的列放在一个表,常用字段的表可考虑Memory引擎。
    • 不经常使用的字段单独成表。
    • 把text、blob等大字段拆分放在附表。如:把用户文章表分成主表news和从表news_data,主表存标题、关键字、浏览量等,从表存具体内容、模板等。

分库、分表注意事项

  • 维度问题

    • 针对用户购买记录数据,如果按照用户纬度分表,则每个用户的交易记录都保存在同一表中,所以很快很方便的查找到某用户的购买情况,但是某商品被购买的情况则可能分布在多张表中,查找起来比较麻烦。
    • 若按照商品维度分表,方便查找商品购买情况,但查找个人交易记录比较麻烦。
    • 常见解决方案:
      • 通过扫表方式解决,效率太低,不可行。
      • 记录两份数据,一份按照用户纬度分表,一份按照商品维度分表。
      • 通过搜索引擎解决,但如果实时性要求很高,则牵涉到实时搜索问题。
  • 避免分表join操作。关联的表有可能不在同一数据库中。
  • 避免跨库事务
    • 避免在一个事务中修改db0、db1中的表,不仅操作复杂,而且影响效率。
  • 分表宜多不宜少;避免后期可能二次拆分。
  • 尽量同组数据统一DB服务器。例如将卖家a的商品和交易信息都放到db0中,当db1挂了的时候,卖家a相关的东西可以正常使用。即避免多个数据库中的数据产生依赖。

References

  • Mysql快速插入千万条测试数据. 造数据.方式有利有弊
  • mysql中迅速插入百万条测试数据的方法. 造数据. 另3种方法总结
  • mysql数据库分表及实现. 简单示例
  • mysql分库分表实战及php代码操作完整实例. php代码实现
  • MySQL之——基于Amoeba实现读写分离

MySQL分库分表面试知识总结相关推荐

  1. MySQL分库分表面试知识点

    目录 1 问题分析: 1.1 背景 1.2 业务分库 1.3 数据库分表 2 为什么要分库分表? 3 用过哪些分库分表中间件? 3.1 你们具体是如何对数据库如何进行垂直拆分或水平拆分的? 4 Mys ...

  2. mysql分库分表面试_【53期】面试官:谈一下数据库分库分表之后,你是如何解决事务问题?...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.概述 ...

  3. MySQL分库分表和优化

    第九阶段模块三 分库分表技术之MyCat 1.海量存储问题 1.1 背景描述 随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无 ...

  4. 使用EntityFrameworkCore实现Repository, UnitOfWork,支持MySQL分库分表

    昨天(星期五)下班,19:00左右回到家,洗个澡,然后20:30左右开始写代码,写完代码之后,上床看了<生活大爆炸10季>17.18两集,发现没有更新到19集,瞄了一眼手机,竟然已经是凌晨 ...

  5. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作

    通过命令行启动.停止MySQL服务器: start: net start mysql stop: net stop mysql 连接MySQL服务器:\>mysql -h127.0.0.1 -u ...

  6. 如何彻底解决烦人的 MySQL 分库分表问题?写一个更好的数据库!

    作者 | 黄东旭 责编 | 郭   芮 我还清楚记得,五年前的这个时候,当时还在豌豆荚,午后与刘奇和崔秋的闲聊关于未来数据库的想象,就像一粒种子一样,到了今天看起来也竟枝繁叶茂郁郁葱葱,有点感慨.按照 ...

  7. MySQL第七讲:MySQL分库分表详解

    MySQL分库分表详解 摘要:本文是MySQL第七讲:MySQL分库分表详解流程,非常全面的总结,强烈建议保存下来,在需要时看看 文章目录 MySQL分库分表详解 1.什么是分库分表,何时要分库分表 ...

  8. 最全的MySQL分库分表方案总结

    " 面试中我们经常会碰到的关于分库分表的问题!今天就给大家介绍互联网公司常用 MySQL 分库分表方案!希望对大家的面试有所帮助! 数据库瓶颈 不管是 IO 瓶颈,还是 CPU 瓶颈,最终都 ...

  9. Java互联网架构-Mysql分库分表订单生成系统实战分析

    分库分表的必要性 首先我们来了解一下为什么要做分库分表.在我们的业务(web应用)中,关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的"有状态 ...

最新文章

  1. SCCM2012系列之三,SCCM2012部署前的IIS准备
  2. 英特尔发布全新CPU架构 称摩尔定律未死 中国研究院迎20周年
  3. java多线程实现表复制_Java多线程的三种实现方式
  4. XP与Ubuntu双系统的问题
  5. hdu 2072 单词数
  6. netty系列之:文本聊天室
  7. linux系统设置IP地址
  8. 有高级计算机证可以入户东莞吗,本科有学位或有高级职称,2019年可以入户东莞吗?...
  9. 程鑫峰:1.23日央行推行负利率政策,伦敦金后市行情解析
  10. community 计算模块度_燃气模块炉使用信息采集表
  11. netty源码阅读之UnpooledByteBufAllocator
  12. linux显卡驱动未加载,Linux下无显卡驱动的解决办法
  13. 49 - 算法 - Leetcode-111 -二叉树的最小深度 -递归循环
  14. Bezier曲线扫盲
  15. 清北学堂模拟赛d6t2 刀塔
  16. 【python|opencv】读取/保存图片,路径含有中文问题解放方案(opencv 无法读取/保存图片)
  17. 铺铜规则在哪设定_干货丨PCB layout结合生产设计必须遵循这六大规则!
  18. 上传本地新项目到SVN服务器
  19. 计算机无法打开pdf文件夹,计算机打开PDF文档时发生错误. 如何修复损坏的文件...
  20. App自动化测试之企微打卡、快手刷金币

热门文章

  1. 唯品会osp简介(转)
  2. cmpp2.0 php,174短信发送状态回执错误码、返回值信息、错误原因
  3. 【五校联考1day1】我才不是萝莉控呢
  4. linux下u盘病毒msdos,手杀U盘中ms-dos.com病毒
  5. 【正则】Lua中的正则表达式
  6. 【zz】 现代CPU Cache结构 和 陈首席对CPU Cache的讲解
  7. 移动磁盘使用驱动器中的光盘之前需要格式化数据如何恢复
  8. pytorch和tensorflow中实现SMU激活函数
  9. 机器学习系列5-梯度下降法
  10. 2018.07.19【2018提高组】模拟C组