免费网站维护,什么网站可以做电影投资,网站建设项目费用报价,怎样可以提升自己的网站一、什么是分库分表 分库分表就是指在一个数据库在存储数据过大#xff0c;或者一个表存储数据过多的情况下#xff0c;为了提高数据存储的可持续性#xff0c;查询数据的性能而进行的将单一库或者表分成多个库#xff0c;表使用。
二、为什么要分库分表 分库分表其实是两…一、什么是分库分表 分库分表就是指在一个数据库在存储数据过大或者一个表存储数据过多的情况下为了提高数据存储的可持续性查询数据的性能而进行的将单一库或者表分成多个库表使用。
二、为什么要分库分表 分库分表其实是两个操作分库是指将单一数据库分成多个数据库使用分表是指将单一表分成多个表使用。 分库是因为在单一数据库的情况下单一数据库存储空间有限如果存储到达临界需要分配物理存储资源所以可以通过分库来增加数据存储量。在大量进行插入操作的时候对单一数据库的性能会影响很大所以使用分库可以将单一数据库分成多个库承受插入操作性能会更高。还有单一数据库在高并发的情况下很容易连接数用尽报too many connection可以通过配置文件设置最大连接数。用分库的话会有多个数据库承受并发情况更好线程用尽的情况更小一些。 分表是因为单一数据表的存储数据容量过大对于阿里规范中它说明是单一表的存储容量大于2G或单表存储数据的容量大于500w通过命中索引优化SQL对于查询数据的效率没有提升的情况下就需要分表。
三、怎么分库分表 分库分表实际上分为有两种分发一种是垂直分库分表另一种是水平分库分表。 1.垂直分库分表 垂直分库的意思就是将一个数据库里的多个表拆分例如有数据库A和B数据库本应该有1234张表垂直分库的意思是将库中的某几张表存到A中剩下的存储到B中。 垂直分表的意思是表中有字段1234现在将这个数据表中的数据拆分到两个表A、B中比如A表存储字段123B表存储4然后A表和B表可以通过一个主键外键相关联。这样的好处是指因为一个表中一个数据存储过大但是有几个字段不频繁使用如果在大量频繁查询的过程会造成I/O增加。 对于垂直分库的情况下原本同一张数据表中的内容分到不同的库中不同表中对于查询全部字段的时候就需要多表联查但是在mycat中有些版本不支持所以需要将某些表设置成全局表这样就能在每个库都有该表可以进行多表联查。 2.水平分库分表 水平分库的意思和水平分表的意思差不多。水平分库指将库中的数据表与另一个库的表一块进行存储数据。分表意思是两个表同时对同一种数据进行存储。 这种就行避免单表进行查询的时候在索引sql优化之后还是查询慢的情况。 学过一种是代理模式的叫做mycat的中间件可以进行分库分表还可以进行读写分离这种有一个虚拟库通过配置虚拟表然后配置节点以及节点信息比如设置dataHost路由信息。对于分库水平分表还需要设置分片规则比如常用的根据id范围分配取模分片将主键转成2进制与对应个1取余后根据范围分配还有枚举分片一致性hash分配指的是将主键根据hash算法算出后存储到对应的分片的表中还有按照时间进行分片。
四、分库分表可能会出现的问题 1.联合查询的时候跨节点查询 这种情况下有些版本或者其他中间件可能会智能联查但实际上就是通过不同库的不同表中间的数据直接查出来最后合并后返回结构过程复杂繁琐。 2.全局唯一主键 对于不同库或者不同表中存储数据可能会出现id唯一的问题主键肯定是要唯一的但是对于分表后还要保持id唯一是不太容易的可以设置一个表专门设置主键id自增分表存储数据时候可以根据这个id存到数据表的主键里。不过这个id 是由数据库生成的并且由单表生成如果并发大的情况下这个表压力会过大生产较慢。或者使用UUID这种是全局唯一的id但是它的顺序可能不一致可能会出现存储过程IO消耗过大因为可能会出现页分裂现象。还有就是雪花算法这种虽然id的长度过大但是自增且唯一。 3.实物一致性的问题 对于多个表如果是垂直分库的情况下插入数据无法保证两个库的数据都同时存储成功或者都失败失败后回滚。