分库 分表 我不是女神ヾ 2022-06-02 03:37 246阅读 0赞 **分库,降低了单点机器的负载;分表,提高了数据操作的效率,尤其是Write操作的效率。** (1)切分的方式主要有两种,水平切分和垂直切分。 1、水平切分 简单的说就是,把一张表分离成几张一模一样的表,然后表的名字不同。这种切分适合于一张表的数据量过大而导致操作时间变慢的情况,如保存的一些记录表。 2、垂直切分 把不同的业务模块分成不同的数据库,这些业务模块直接最好是0耦合(简单的说就是毫无关系)。这主要是适合数据量普遍较大,而且业务场景比较分散,互相之间没有逻辑关系的情况。 (2)分离的策略 1、“%”取模 2、MD5哈希 3、移位 4、日期时间(根据不同的日期分表,如一个月一张表,这个月就操作这张表,下个月就下张表) 5、枚举范围(用户1-10000操作第一张表,用户10001-20000操作第二张表) (3)分离方式 1、原生实现,利用原生的框架,自己去控制实现。 优点是:容易控制,掌握主动权。 缺点是:代码量多,需要自己很清楚,修改不方便,不支持复杂的切分,比如切分之后还需要做一些分页查询,还有上面说的主键问题等。 2、插件实现,利用框架本身开发的一些插件,去实现这些插件,然后利用插件去 访问数据库,直接实现分离。 优点是:代码量少,实现简单,扩展性好。 缺点是:不易控制,分离方式有限,出现问题难以解决。 3、中间件实现。利用一些数据库访问的中间件,在访问数据库之前做一些操作使得sql进行相应的变化从而实现分离。 优点是:耦合小,扩展性好,可以解决分布式事务的问题。 缺点是:实现比较复杂,需要对中间件进行学习,成本较大。维护也是一个大问题。
还没有评论,来说两句吧...