数据库分库分表(持续更新中)

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

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

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

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

一、水平拆分:

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

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

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

优点:
        1. 不存在单库大数据,高并发的性能瓶颈。
        2. 对应用透明,应用端改造较少。     
        3. 按照合理拆分规则拆分,join操作基本避免跨库。
        4. 提高了系统的稳定性跟负载能力。
 
缺点:
        1. 拆分规则难以抽象。
        2. 分片事务一致性难以解决。
        3. 数据多次扩展难度跟维护量极大。
        4. 跨库join性能较差。

二、垂直拆分:

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

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

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

摘自:https://www.cnblogs.com/firstdream/p/6728106.html

猜你喜欢

转载自www.cnblogs.com/takemyjavalisfe/p/10079868.html