今天学习了数据库分表分库,感觉记录下一些东西以便以后的查看。

1、数据库建立索引,可以加快表数据的查询,但是过多的索引,会占用大量的内存,维护难度较大,因为索引底层的算法是B-tree,树的特点就是查找数据快按时数据增删改比较慢。

2、数据库的表拆分,分为水平拆分,垂直拆分,水平垂直拆分(自定义的)。

3、mycat:数据库的中间件,数据库的代理,屏蔽物理数据库的,支持多种拆分结构。

一、水平拆分:(部分摘自:https://www.cnblogs.com/firstdream/p/6728106.html

1)、把同一个表拆到不同的数据库中。

2)、垂直拆分后遇到单机瓶颈,可以使用水平拆分。

3)、水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中 的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式,如图:

优点:
1. 不存在单库大数据,高并发的性能瓶颈。
2. 对应用透明,应用端改造较少。     
3. 按照合理拆分规则拆分,join操作基本避免跨库。
4. 提高了系统的稳定性跟负载能力。
5. 切分策略简单,根据uid,按照范围,user- center很快能够定位到数据在哪个库上, 扩容简单,如果容量不够,只要增加数据库即可(用户表实际场景)
缺点:
1. 拆分规则难以抽象。
2. 分片事务一致性难以解决。
3. 数据多次扩展难度跟维护量极大。
4. 跨库join性能较差。
5.数据量不均,新增的user-db3,在初期的数据会比较少, 请求量不均,一般来说,新注册的用户活跃度会比较高,故user-db2往往会比user-db1负载要高,导致服务器利用率不平衡。(用户表的实际场景)

二、垂直拆分:

1)、垂直拆分是把不同的表拆到不同的数据库中。

2)、按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面。

优点:
1. 拆分后业务清晰,拆分规则明确。
2. 系统之间整合或扩展容易。
3. 数据维护简单。
缺点:
1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
3. 事务处理复杂。
三 、数据库切分方法|哈希法
优点:

•切分策略简单,根据uid,按照范围,快速定位到分布的数据库中。
•数据量均衡:只要uid是均衡的,数据分布在各个库是均衡的。
•请求量均衡:只要uid是均衡的,每个库负载也相对是均衡的。
缺点:
1、扩容麻烦,如果需要增加一个库,需要重新hash,这有可能会导致数据迁移,给平滑升级带来困难。

四、真实的业务场景:

1)、订单中心数据库切分方法|数据冗余法(部分参考原文:https://blog.csdn.net/sunhuiliang85/article/details/78418546 )

互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量。

水平切分会有一个patitionkey,通过patition key的查询能够直接定位到库,但是非patitionkey上的查询可能就需要扫描多个库了。

此时常见的架构设计方案,是使用数据冗余这种反范式设计来满足分库后不同维度的查询需求。

订单表可以中可以存订单编号,卖家的编号,买家的编号,同时再以买家编号为主键建立买家表,再以卖家编号为主键建立卖家表。

转载于:https://www.cnblogs.com/takemyjavalisfe/p/10079868.html

数据库分库分表(持续更新中)相关推荐

  1. 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案...

    为什么80%的码农都做不了架构师?>>>    版权声明:本文由本人撰写并发表于2012年9月份的<程序员>杂志,原文题目<一种支持自由规划的Sharding扩容方 ...

  2. mysql分库分表中间件6_当当开源sharding-jdbc,轻量级数据库分库分表中间件

    近期,当当开源了数据库分库分表中间件sharding-jdbc. Sharding-JDBC是当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数据 ...

  3. 当当网mysql分库分表策略_当当开源sharding-jdbc,轻量级数据库分库分表中间件

    近期,当当开源了数据库分库分表中间件sharding-jdbc. Sharding-JDBC是当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数据 ...

  4. 阿里巴巴中台战略--数据库分库分表之异构索引表

    阿里巴巴中台战略 阿里共享事业部的产生.演变和发展 企业信息中心发展的症结 共享服务体系 分布式服务框架的选择 共享服务中心建设原则 数据库瓶颈阻碍业务的持续发展 数据库分库分表 数据库分库分表之异构 ...

  5. MariaDB Spider 数据库分库分表实践 分库分表

    分库分表 一般来说,数据库分库分表,有以下做法: 按哈希分片:根据一条数据的标识计算哈希值,将其分配到特定的数据库引擎中: 按范围分片:根据一条数据的标识(一般是值),将其分配到特定的数据库引擎中: ...

  6. Mycat - 数据库分库分表中间件,国内最活跃的、性能最好的开源数据库中间件

    转载自 Mycat - 数据库分库分表中间件,国内最活跃的.性能最好的开源数据库中间件 Mycat是什么 Mycat - 数据库分库分表中间件,国内最活跃的.性能最好的开源数据库中间件! 一个彻底开源 ...

  7. 别再问什么是数据库分库分表了,看这里!

    编者语:为了避免被误解为:「手里有把锤子,看什么都是钉子!」,说明一下不是什么业务都适合分布式数据库,更不是用了分布式数据库性能就一定能得到扩展. 其次:本文为纯干货,建议先转发.收藏再观看. 分布式 ...

  8. 亿级流量网站架构核心技术之“数据库分库分表策略”

    本文节选自<亿级流量网站架构核心技术--跟开涛学搭建高可用高并发系统>一书 张开涛 著 电子工业出版社出版 小编会从留言中选择获赞最多的前五名用户免费送出此书哦!规则见文末. 数据库分库分 ...

  9. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

  10. 一文读懂数据库分库分表

    阅读此文你将了解: 什么是分库分表以及为什么分库分表 如何分库分表 分库分表常见几种方式以及优缺点 如何选择分库分表的方式 数据库常见优化方案 对于后端程序员来说,绕不开数据库的使用与方案选型,那么随 ...

最新文章

  1. java out.write ie8_整理一下最近遇到的ie8兼容问题
  2. 好程序员Web前端教程分享JavaScript开发技巧
  3. linux100day(day8)--shell监控脚本练习
  4. Java Eclipse插件
  5. 【C语言简单说】三:整数变量和输出扩展(1)
  6. win10 vscode 无法激活python 虚拟环境的解决办法
  7. 【JavaScript】正则表达式 1
  8. unity 开发射击打靶vr_【好玩微信小游戏大全】香肠派对:点开既玩的射击小游戏!正版授权...
  9. tornado-ioloop-async-io
  10. 如何提高Android系统Aututu benchmark跑分
  11. Bulk insert远程服务器导入sqlserver
  12. libjpeg-turbo编译流程
  13. 从零开始学写脚本【第一天】
  14. 银行专业术语解释说明 超级详细
  15. c语言和python前景_C语言程序员未来发展前景如何
  16. php datedif,Datedif函数全面解析及BUG分析
  17. 【数据结构与算法】之深入解析“1比特与2比特字符”的求解思路与算法示例
  18. 使用bat脚本上传文件到Linux服务器
  19. 输入法打出的英文间隔很大
  20. 干货 | 携程基于BookKeeper的延迟消息架构落地实践

热门文章

  1. Tomcat - 你该知道的Tomcat生产环境部署
  2. 高并发编程-Thread_正确关闭线程的三种方式
  3. html 跨域_常见跨域解决方案以及Ocelot 跨域配置
  4. 鸿蒙系统突破,华为解锁新成就!新系统用户突破1亿,鸿蒙系统也传来了新消息...
  5. linux下如何使用有道词典
  6. 4.Eclipse的安装和使用
  7. 2.修改/etc/hosts文件 /安装SSH、配置SSH无密码登陆(全程切换到hadoop用户下操作)
  8. 【自动驾驶】8. MDC通信架构 + DDS + SOME/IP
  9. caffe windows学习:第一个测试程序
  10. 图像检索:图像拷贝检索PHash改进方案