分库分表总结
1水平拆分主要是讲一个表或者一个库等值划分到不同地方。分为表/库水平拆
比如水平拆分表,就是将同样的表比如order放到多个库中,然后根据拆分策略比如id取模插入到不同库中,他们的表都是同样的
而水平拆库就是将一个库这个库中的表都一样的,就一个库等值部署到多台服务器上,然后根据id策略插入时候去找对应的服务器。策略也可以id%服务器台数
2垂直拆分也可以分成表垂直拆,库垂直拆
表垂直拆:就是将一个表由于字段多,将这个表按照字段拆成两个表,一个表为归纳表(主),一个为详细表(次)。比如user(name,age,id,hobby,xueli,famialy)就可以拆成user(user,name,id) 和
user_detail(id,hobby,xueli,famialy)
库垂直拆分:由于库中表太多,我们可以根据业务将这些表划分,然后根据划分的维度建立不同的库,然后根据维度将这些表散落到这些库中
拆分无非就是解决表膨胀或者库膨胀带来的增删改主要是查询的效率大大降低
一般而言一个表大于1000w条数据性能就不行了
小结:
一般日常的逻辑划分表到不同库,就是垂直分库,一般将大表按字段拆成主表从表就是垂直分表。所以日常常见的都是垂直划分的规则。如果对于大项目比如淘宝订单,随着表行的增加需要冷热隔离,就需要水平拆分表了,按时间将表分摊到不同库上,库也可以水平摊到不同机器上。
总体而言垂直拆分需要打破原来的结构不管是表还是库。水平拆分不会打破结构只是用于分摊内容而已。
分库分表和主从的区别:
1他们的区别主要是解决的方向不同,分库分表解决的性能和业务逻辑问题
2而主从主要是解决扩容和可用性,当然通过读写分离也能解决一些性能问题
对于分库分表在分布式上一般使用的框架比较多比如sharding-jdbc/mycat。但是这两者还是有些区别的,前者使用起来比较灵活,后者一旦配置了一般很少更改