`
bugyun
  • 浏览: 540858 次
社区版块
存档分类
最新评论

MYSQL 分库的优缺点

 
阅读更多

何谓垂直切分,即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如,我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日志数据库logDB等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。

何谓水平切分,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。例如,我们的userDB中的用户数据表中,每一个表的数据量都很大,就可以把userDB切分为结构相同的多个userDB:part0DB、part1DB等,再将userDB上的用户数据表userTable,切分为很多userTable:userTable0、userTable1等,然后将这些表按照一定的规则存储到多个userDB上。

分库的优点是:
1. 数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
2. 实现简单,库与库之间界限分明,便于维护,缺点是不利于频繁跨库操作,单表数据量大的问题解决不了。
3. 各库直接高耦合的情况下,不建议分库。
4. 根据数据库中数据量的瓶颈所在,并综合项目的业务类型进行考虑如何分库(垂直切分、水平切分)
5. 在执行分库分表之后,由于数据存储到了不同的库上,数据库事务管理出现了困难。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价;如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。
6. 在执行了分库分表之后,难以避免会将原本逻辑关联性很强的数据划分到不同的表、不同的库上,这时,表的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表,结果原本一次查询能够完成的业务,可能需要多次查询才能完成。
7. 额外的数据管理负担和数据运算压力。额外的数据管理负担,最显而易见的就是数据的定位问题和数据的增删改查的重复执行问题,这些都可以通过应用程序解决,但必然引起额外的逻辑运算,例如,对于一个记录用户成绩的用户数据表userTable,业务要求查出成绩最好的100位,在进行分表之前,只需一个order by语句就可以搞定,但是在进行分表之后,将需要n个order by语句,分别查出每一个分表的前100名用户数据,然后再对这些数据进行合并计算,才能得出结果。

垂直切分:

  适合数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的。
水平切分:

  数据库中的表并不多,但单表的数据量很大、或数据热度很高,应该选择水平切分,除了在分割时要对分割的粒度做好评估,考虑数据平均和负载平均,后期也将对项目人员及应用程序产生额外的数据管理负担。

分表的优点是:
1. 能解决单表数据量大的问题,但是缺点却恰恰是不便于维护。
2. 分表实现起来比较复杂,特别是分表规则的划分,程序的编写,以及后期的数据库拆分移植维护。

分享到:
评论

相关推荐

    mysql高可用分库分表.pdf

    mysql分库分表,详细介绍了垂直分表、水平分表、垂直分库、水平分库,包括它们的优缺点,解决的问题,有具体案例

    常见(MySQL)面试题(含答案).docx

    说说分库与分表设计(面试过) 聚集索引与非聚集索引的区别 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别? MySQL常见的存储引擎...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    09-分库备份后mysql如何分库恢复实战.avi 10-mysql进程-状态-在线修改参数重要知识讲解.avi 11-mysqlbinlog命令介绍及实战讲解.avi 12-mysqldump-master-data参数答疑详解.avi 第六部 MySQL主从复制原理及实战部署...

    Linux下mysql 5.6.17安装图文教程详细版

    linux安装mysql服务分两种安装方法: ①源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错; ②使用官方编译好的二进制文件安装,优点是安装速度快,安装步骤...

    四家二线大厂面经.pdf

    2、是否做过分库分表?如果数据量很大了,你会怎么设计分表方案? 3、平时项目中,MySQL 单表的数据量有多大?访问量如何?如果碰到性能问 题,你会怎么优化?联表查询的隐患是什么?都有哪些优化方案呢? 4、实际...

    python-mysql day04.txt

    2、缺点 1、占用物理存储空间 2、需动态维护,占用系统资源 3、分类 1、普通(MUL)、唯一(UNI,字段值不能重复,可为NULL) 1、创建 index(字段名),index(字段名) unique(字段名),unique(字段名) create ...

    Python程序设计:数据存储技术.pptx

    数据采集和爬虫基础 ...关系型数据库是一种常用的结构化数据存储和管理方式,易于管理和查询,例如:mysql数据库。 优点:易于管理和查询。 缺点:数据结构一旦定义不能修改。 数据库存储 MongoDB数

    理解TIDB架构设计

    随着互联网的飞速发展,业务量可能在... 要想能做到水平扩展,唯一的方法就业务层的分库分表或者使用中间件等方案。但是,这些中间层方案也有很大局限性,执行计划不是最优,分布式事务,跨节点 join,扩容复杂等。

    TiDB数据库 v4.0.9

    您可以继续使用所有现有的MySQL客户端库,并且在许多情况下,您无需在应用程序中更改任何代码行。因为TiDB是从头开始构建的,而不是MySQL分支,所以请查看已知兼容性差异列表。具有高度一致性的分布式事务 TiDB在...

    基于自动生成知识库的智能问答系统python源码+项目说明+数据+超详细注释.tar

    这种可以克服上面流水线方法的缺点,但是可能会有更复杂的结构。参考:https://zhuanlan.zhihu.com/p/31672529 实体提取用哈工大的库pyltp(可以用CTB模型重新做分词模型),导入官方模型即可,也可以导入自己的 关系...

    分布式架构系统生成全局唯一序列号的一个思路

    分布式架构下,唯一序列号生成是我们在设计一个系统,尤其是数据库使用分库分表的时候常常会遇见的问题。当分成若干个sharding表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题。在携程账号数据库迁移MySQL...

    asp.net知识库

    2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...

    消息队列RabbitMQ学习-1

    消息队列RabbitMQ学习 为什么学习RabbitMQ 每一种技术的出现,都是为了解决业务需求而产生的。...为了防止单点故障,数据库采用主从复制,还会采用读写分离,分库分表等技术,但是这种情况下,系统架构依然有问题; 在

    leetcode算法题主函数如何写-java-interview:java面试总结

    leetcode算法题主函数如何写 ...6.分库分表你了解吗,有什么优点和缺点 什么情况下需要他,现在有哪些方案 7.多线程的作用 多核CPU的作用 多核CPU适合什么样的场景 8.I/O是什么,过程中有用到CPU吗,

    spring-boot-mybatis-interceptor:mybatis自定义主键插件,通过该插件生成分布式唯一雪花ID作为数据库表的主键

    2、分表分库会有ID冲突。 UUID: 1、太长,并且有索引碎片,索引多占用空间的问题 2、无序。 雪花算法就很适合在分布式场景下生成唯一ID,它既可以保证唯一又可以排序,该插件项目的原理是 通过拦截器拦截Mybatis的...

    文字识别解读小程序.zip

    系统的基本环境是以MINAWeb发框架,同时使用微信开发者工具开发了微信applet户端,采用Postman为服务器界面的测试工具,使用SQLYog接数据库作为MySQL可视化管理工具 正常的文字识别一般将文档页作为识别目标,其...

    Java 数据库主键生成类 IdWorker

    数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。 单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求: 1 不能有单点故障。 2 以时间为序,或者ID里包含时间。这样一是可以少一...

    Sales-Analysis-Project:简短练习以显示一年的销售数据

    我计划在Excel中添加一个SQL / MySQL处理方法以及一个细目分类,以显示每个优点/缺点,或者至少显示每个平台中可能存在的优点/缺点。 数据源 用于重新创建数据集的代码包含在Sales_Data_csv中。如果您不喜欢克隆原始...

Global site tag (gtag.js) - Google Analytics