分库分表的一般做法 中间件的形态

简介: 【7月更文挑战第14天】

分库分表的一般做法

一般会使用三种算法:

  1. 哈希分库分表:根据分库分表键算出一个哈希值,根据这个哈希值选择一个数据库。最常见的就是数字类型的字段作为分库分表键,然后取余。比如在订单表里,可以按照买家的ID除以8的余数进行分表
  2. 范围分库分表:将某个数据按照范围大小进行分段。比如说根据ID,[0,1000)在一张表,[1000,2000)在另外一张表。最常见的应该是按照日期进行分库分表,比如每个月一张表
  3. 中间表:引入一个中间表来记录数据所在的目标表。一般是记录主键到目标表的映射关系。

这三者并不互斥,也就是说可以考虑使用哈希分库分表,同时引入一个中间表;也可以先进行范围分库分表,再引入一个中间表。

分库分表中间件的形态

  1. SDK形态:通过依赖的形式引入代码里,比如Java的依赖ShardingSphere
  2. Proxy形态:独立部署的分库分表中间件,对于所有的业务方来说,就像一个普通的数据库,业务方的查询发送过去后,就会执行分库分表,发起实际的查询,再把查询结果返回给业务方。ShardingSphere也支持这种形态。

  3. Sidecar形态:提供了一个分库分表的Sidecar,但是现在并没有非常成熟的产品

    Sidecar是一种分库分表中间件的形态。它是一个理论上的概念,指的是一个独立的组件,为应用程序提供分库分表的功能。在这种形态下,Sidecar作为应用程序的伴随服务运行,类似于服务网格中的Sidecar容器,它与应用程序实例部署在一起,但作为独立的进程运行。

其中,SDK形态的性能最好,但是和语言强耦合。
Proxy形态性能最差,因为所有的数据库查询都发送给它了,很容易成功性能瓶颈。尤其单机部署Proxy的话,还面临着单节点故障的问题。优点是跟编程语言无关,部署一个Proxy之后可以给使用不同编程语言的业务使用。同时,业务方可以轻易地从单库单表切换到分库分表。

目录
相关文章
|
5月前
|
中间件 存储 SQL
分库分表优化:换中间件 二次查询
【7月更文挑战第7天】
61 15
|
关系型数据库 MySQL 中间件
MySQL实现分库分表代码实战(Mango中间件)
MySQL实现分库分表代码实战(Mango中间件)
227 1
|
SQL cobar 算法
分库分表中间件介绍
分库分表中间件介绍
|
关系型数据库 MySQL 中间件
Mycat中间件综合部署高可用-读写分离-分库分表(1.6)
Mycat中间件综合部署高可用-读写分离-分库分表(1.6)
138 0
|
SQL 关系型数据库 Java
分库分表:中间件方案对比
分库分表:中间件方案对比
2598 11
分库分表:中间件方案对比
|
SQL cobar 算法
Mysql分库分表中间件 技术选型对比
Mysql分库分表中间件MyCAT 和 DBLE的技术选型分析
3838 14
|
SQL 监控 Java
Mycat - 数据库分库分表中间件,国内最活跃的、性能最好的开源数据库中间件!
Mycat是什么 Mycat - 数据库分库分表中间件,国内最活跃的、性能最好的开源数据库中间件! 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替...
2763 9
|
SQL druid 中间件
分库分表中间件的高可用实践
分库分表中间件的高可用实践 前言 分库分表中间件在我们一年多的锤炼下,基本解决了可用性和高性能的问题(只能说基本,肯定还有隐藏的坑要填),问题自然而然的就聚焦于高可用。本文就阐述了我们在这方面做出的一些工作。
2160 8
|
6月前
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
1715 0