MySQL水平垂直拆分分表分库分片分表,是业务逻辑上分的
如userid,name,addr一个表,为了防止表过大,分成2个表
t1:userid,nameT2:userid,addr分库,对业务透明,在物理实现上分成多个表,逻辑上还是一个表
按照时间分区,大部只查询最近的订单数据,那么大部分只访问一个分区,比整个表小多了,数据库可以更加好的缓存,性能也提高了
这个是以数据库分的,应用程序透明,无需修改
分片,业务透明,在物理实现上分成多个服务器,不同的分片在不同服务器上
分区可以把表分到不同的硬盘上,但不能分配到不同服务器上
一台机器的性能是有限制的,用分片可以解决单台服务器性能不够,或者成本过高问题
当分区之后,表还是很大,处理不过来,这时候可以用分片
orderid,userid,ordertime,
userid%4=0,用分片1userid%4=1,用分片2userid%4=2,用分片3userid%4=3,用分片4上面就是一个简单的分片路由,根据userid选择分片,即不同的服务器
为什么要分片一个生产系统刚开始业务量较少,一个应用一个数据库足以应付
随着用户量增大,访问量增大,数据量增大,单库已经力不从心
互联网应用架构需要具备高可用高并发可弹性扩容的能力,所以当数据库压力与日俱增,需要妥善的扩容机制
分片实现数据层中间件TDDL淘宝Cobar阿里B2BMycat(前身是Cobar)Sharding-jdbc当当网Mysql-proxy官方,负载平衡,读写分离,failoverHibernateShard多数据库水平分区解决方案垂直拆分垂直拆分是指,将一个属性较多,一行数据较大的表,将不同的属性拆分到不同的表中,以降低单库(表)大小,达到提升性能的目的的方法,垂直切分后,特点:(1)每个库(表)的结构都不一样(2)一般来说,每个库(表)的属性至少有一列