常见的几种数据拆分方案
1、客户端分片
直接在应用层实现读取分片规则,解析规则,根据规则实现切分逻辑。
这种方案优缺点:
-
侵入业务(缺点);
-
实现简单,适合快速上线,容易定位问题;
-
对开发人员的能力要求较高;
-
开源项目dbsplit采用这种方案实现;
2、分布式数据组件
客户端分片存在几个明显的问题:
-
对业务侵入性很高,
-
代码复用性差,不同的系统如果要实现数据拆分,需要重新实现
-
消耗业务人员过多精力
为了提高代码的复用性以及让业务人员将更多的时间投入到业务开发中,将客户端分片逻辑拆分到组件中,各系统只需要引入依赖就可以实现分库能力。
分布式数据组件作为轻量级分库分表解决方案,以sdk方式嵌入在应用内,和应用同时共享物理资源(CPU、内存),所以不建议采用这种方式处理大数据量跨库联合查询。
3、分布式数据代理
分布式数据代理通常实现MySQL协议,作为一个单独的服务,对外伪装成MySQL数据库,内部实现分库分表逻辑。上层是分布式中间件:维护一套统一的分片规则,提供SQL 解析,请求转发和结果合并的能力,下层存储采用开源MySQL或PG等单机数据库,提供数据存储和执行能力。
这种实现方案支持复杂的跨库联合查询,独享物理资源。
这种方式主要使用比较成熟的内核来解决扩展性的问题,所以生态友好、成本较低,也比较容易实现。
不过,缺点也显而易见,比如分布式事务等;最重要的是,因为使用的是开源产品的内核,数据库会始终受制于开源代码修改、专利、发行方式等很多方面的风险。
4、分布式数据库
目前国内已经存在很多成熟的分布式数据库,如OB等,同时支持分布式事务。