数据库拆分的几种方式

简介: 数据库做拆分的几种方式:1.按功能划分(垂直切分)将不同功能相关的表放到不同的数据库中,这样做的好处是非常直观。但当某一部分的功能其数据量或性能要求超出了可控的范围,就需要继续对其进行深入的再切分。
数据库做拆分的几种方式:
1.按功能划分(垂直切分)

将不同功能相关的表放到不同的数据库中,这样做的好处是非常直观。但当某一部分的功能其数据量或性能要求超出了可控的范围,就需要继续对其进行深入的再切分。


2.按表中某一字段值的范围划分(水平切分)

当伴随着某一个表的数据量越来越大,以至于不能承受的时候,就需要对它进行进一步的切分。一种选择是根据key 的范围来做切分,譬如ID 为 1-10000的放到A上,ID 为10000~20000的放到B。这样的扩展就是可预见的。另一种是根据某一字段值来划分,譬如根据用户名的首字母,如果是A-D,就属于A,E-H就属于B。这样做也存在不均衡性,当某个范围超出了单点所能承受的范围就需要继续切分。还有按日期切分等等。

优点:单表大小可控,天然水平扩展

缺点:无法解决集中写入瓶颈的问题


3.基于hash的切分

一般采用mod来切分,一开始确定切分数据库的个数,通过hash取模来决定使用哪台。这种方法能够平均地来分配数据,但是伴随着数据量的增大,需要进行扩展的时候,这种方式无法做到在线扩容。每增加节点的时候,就需要对hash 算法重新运算。

所以采用这种方法推荐采用mod 2^n这种一致性哈希

以点评统一订单库为例,分库分表的方案是32*32的,即通过userId后四位mod 32分到32个库中,同时再将userId后四位div 32 mod 32将每个库分为32个表,共计分为1024张表。其线上部署情况为8个集群(主从),每个集群4个库



4.基于路由表的切分

前面的几种方式都是根据应用的数据来决定操作的,基于路由表的切分是一种更加松散的方法。它单独维护一张路由表,根据用户的某一属性来查找路由表决定使用哪个数据库,这种方式是一种更加通用的方案

优点:id和库的mapping算法可以随意更改

缺点:可能引入额外的单点


目录
相关文章
|
13天前
|
数据库 索引
评论功能里数据库的设计
【4月更文挑战第2天】本文探讨了评论系统的树形结构设计,提出了四种方法:邻接表、分段式path、Nested Set和Closure Table。针对评论业务功能,如加载评论页和查看回复,优先考虑邻接表和分段式path。采用邻接表思路,设计了评论表结构,包括Uid、Biz、BizID、RootID、PID、Content、索引和级联删除规则。同时提到了索引设计,如Uid、Biz+BizID、PID和Ctime/Utime,以优化查询性能。
33 3
|
3月前
|
SQL 缓存 中间件
数据库为什么都设计为单表
数据库为什么都设计为单表
28 0
|
6月前
|
存储 SQL NoSQL
01MyCat - 数据库切分概述
01MyCat - 数据库切分概述
27 0
|
9月前
|
存储 前端开发 中间件
应用数据库常见的数据切分方式
应用数据库常见的数据切分方式
89 0
|
11月前
|
SQL 存储 安全
【数据库】01——精通数据库需要掌握这九个维度 1
【数据库】01——精通数据库需要掌握这九个维度
|
11月前
|
存储 SQL NoSQL
【数据库】01——精通数据库需要掌握这九个维度 2
【数据库】01——精通数据库需要掌握这九个维度
|
11月前
|
存储 数据库 索引
数据库的设计
数据库的设计
|
SQL 存储 Oracle
34. 谈谈为什么要拆分数据库?有哪些方法?
34. 谈谈为什么要拆分数据库?有哪些方法?
120 0
34. 谈谈为什么要拆分数据库?有哪些方法?
|
SQL 缓存 NoSQL
数据库分库分表详细拆解
数据库分库分表详细拆解
220 0
数据库分库分表详细拆解
|
存储 算法 关系型数据库
【数据库专题】如何理解数据库的索引?
【数据库专题】如何理解数据库的索引?