数据库中间件概述

article/2025/10/6 5:39:30

1.为什么需要数据库中间件,何为数据库中间件

不同的应用程序有不同的数据存储方式和组网。数据量小的普通的应用程序一般采用单机数据库来持久化数据,如下图。

当数据的并发读写超过数据库服务器的处理能力时,需要进行读写分离来分离读写压力,加缓存服务器来减少数据库的读取压力,如下图。

一般DAO层的代码编写的时候只会连接一个数据库服务器进行数据操作,那么这时就需要数据库中间件隔离这种变化,如下图。

 

2.不同场景所需的数据库中间件特性

不同的应用有不同的业务场景。当应用的业务模块变多时,总的数据量会曾大,并发读写操作会逐渐超过单个数据库服务器的处理能力。

这时,针对读取压力,可以进行集群,多个从库来解决,如下图组网。

而针对写入压力,则不能多个主库,因为多个主库数据需要同步,难以保证数据一致性,而且数据量大单库存储不下,所以需要进行分库分表,如下图组网。

当有些业务数据不仅量大而且读写压力也大的时候,就需要构建如下组网进行分库分表+读写分离。

如此多的复杂情况,综合所有的数据读写压力对数据库中间的能力要求就很严苛,需要支持分库、分表,支持读写分离,对DAO层的影响还要小。

3.数据库中间件设计要点

数据库中间件的设计要点主要有如下9点:

  • 要能解析SQL
  • 能支持读写分离
  • 能支持从库读的负载均衡
  • 支持分库操作
  • 支持分表操作
  • 支持跨库关联查询
  • 对事务处理的支持
  • 主键ID生成
  • 数据源管理

在这之前,对于开发人员来说,数据库的分库分表设计也很重要,即数据库拆分规则,主要有两个层面来拆分,垂直拆分和水平拆分。

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

水平拆分是指对海量数据的表进行分库分表存储,即一张表拆分到不同数据库或者同数据库不同数据表中。优点是拆分规则抽象好,join操作基本可以数据库做;不存在单库大数据,高并发的性能瓶颈;应用端改造较少;提高了系统的稳定性跟负载能力。缺点是拆分规则难以抽象;分片事务一致性难以解决;数据多次扩展难度跟维护量极大;跨库join性能较差。水平拆分中最重要的就是分片的拆分规则,具体可以按范围(时间、数值),列表(地域、组织、分类),散列(hash(字段)%分片数、一致性hash)等方式拆分,甚至可以复合多种方式拆分。

但是无论水平拆分还是垂直拆分,都有共同的技术难点:引入分布式事务问题;跨节点join问题;跨节点合并排序分页问题;多数据源管理问题,这些难点都需要由数据库中间件来解决。

市面上的数据库中间件目前有两种实现模式。

客户端模式,即在应用程序中集成数据库中间件模块,通过该模块来配置管理应用需要的一个或多个数据源,以及访问各个数据源,在模块内完成数据的整合。

服务端(代理)模式,通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明,同时易于数据库扩展。独立的服务能提供更强的处理能力。适用于大型复杂系统。

数据库中间件的相关产品及相关特性支持如下:

数据库中间件大致情况就介绍这么多,后续再对相关中间件再深入探讨。

 


http://chatgpt.dhexx.cn/article/SWGlfgbF.shtml

相关文章

数据库访问中间件

数据库访问中间件 什么是ORM框架 对象关系映射(Obiect Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的…

MySQL中间件Atlas

MySQL中间件Atlas atlas简介 Mysql 的 proxy 中间件有比较多的工具,例如,mysql-proxy(官方提供), atlas , cobar, mycat, tddl, tinnydbrouter等等。 而Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在…

【MySQL】数据库(分库分表)中间件对比

分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm。 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后的表呢,还是一张…

数据库中间件详解

数据库中间件详解 原创: 田守枝 田守枝的技术博客 3月24日 1 数据库拆分过程及挑战 互联网当下的数据库拆分过程基本遵循的顺序是:垂直拆分、读写分离、分库分表(水平拆分)。每个拆分过程都能解决业务上的一些问题,但同时也面临了一些挑战。…

mysql优化---如何搭建mysql的主从关系和mycat中间件

1. 如何搭建mysql的主从关系 解决mysql高并发的瓶颈。 1.1 复制概述 复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 MySQ…

什么是中间件

一、什么是中间件 中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平…

mysql的中间件比较

mysql分布式数据库中间件对比 目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,希望可以对大家有帮助。 1. 什么是中间件 传统的架构模式就是 应用连…

MySQL 中间件汇总比较

360 Atlas 较为活跃,Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用 Atlas 运行的 MySQL 务,每…

MySQL-中间件mycat(一)

目录 🍁mycat基础概念 🍁Mycat安装部署 🍃初始环境 🍃测试环境 🍃下载安装 🍃修改配置文件 🍃启动mycat 🍃测试连接 🦐博客主页:大虾好吃吗的博客 &#x1f9…

MySQL 分表方案及中间件介绍

背景 什么情况下需要分表?这里归纳了3点: (1)某个表被操作的频率过于频繁的时候(可以查看某个表的访问频繁),在流量越来越大的时,可以考虑分表。 (2)某个表的数据量过于庞大的时候(我给自己设…

中间件之MYSQL

体系结构 server层 负责建立连接、分析和执行 SQL 连接器:与客户端进行TCP三次握手;校验用户名和密码;读取权限。查询缓存:key-value缓存在mysql8.0后默认将其关闭;高级版本默认采用页缓存。解析器:词法…

mysql优化——mycat数据库中间件

文章目录 目录 文章目录 前言 一、mycat原理 二、mycat完成读写分离 2.1搭建MySQL的主从模式 2.2实现读写分离 三、mycat垂直分库 四、水平分表 五、水平拆分表的连表操作 六、全局表 总结 前言 Mycat是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以…

mysql中间件汇总

一、写在前面 mysql作为互联网公司都会用到的数据库,在使用过程中。会用主从复制来提高性能。会用分库分表解决写入问题。以下介绍mysql中间件的一些实现方案 二、Atlas Atlas时 360 公司开发维护的一个基于MySQL协议的数据中间层项目。 2.1 atlas架构 Atlas是一…

makfile的编译选项:CFLAGS、CPPFLAGS、LDFLAGS、LIBS

1、LDFLAGS & LIBS 关于makefile的依赖规则以及目标生成的步骤,这篇先不介绍,这里主要关注我在看makefile时遇到的一堆CFLAGS与LDFLAGS定义进行说明。 费了牛劲,才查到GNUmake中文手册中关于CFLAGS与LDFLAGS的说明,他们都是…

Makefile 编译与链接选项及CFLAGS与LDFLAGS说明

CFLAGS与LDFLAGS的说明,他们都是是隐含规则的变量,且是一种命令参数变量. makefile内嵌隐含规则的命令中,所使用的变量都是预定义的变量。我们将这些变量称为“隐含变量”。这些变量允许对它进行修改:在Makefile中、通…

Go新项目-项目添加版本说明,以及参数传递:ldflags、gcflags,外加stripped说明(5)

在Go项目中,会存在展示该项目的版本信息,以及打包日期,项目版本,Go版本等;继Go新项目-编译项目的细节(4)以后再记录下编译优化方向,刚好也有项目版本输出的需求。 关键词&#xff1…

linux编译参数CPPFLAGS、CFLAGS、LDFLAGS参数的理解

参考到下面博客,把编译步骤分解的很细 linuxC编译参数CPPFLAGS、CFLAGS、LDFLAGS参数的理解 - yongfengnice - 博客园 CPPFLAGS : 预处理器需要的选项 如:-I (大写i指定头文件路径) CFLAGS:编译的时候使用的参数 –Wall –g -c LDFLAGS &…

【Java位运算】异或运算的使用

异或运算有个特性:两个相同的数做异或运算,结果为0。 n ^ n 0;常用的方式是查找数组中只出现一次的数字。 例如:在一个数组中,只有一个数字出现了一次,其余数字都出现了两次。 求这个数字。利用异或运算的特性进行计…

java中与运算,或运算,异或运算

Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^) 位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻…

Java中的与、或、非以及异或( | ~ ^)运算符的运算原理

首先,我们要知道Java存储数据是保存的补码,如果对原码、反码以及补码不太懂,可以参考我的另一篇博客。 1. Java的 与( & ) 运算 所有的逻辑运算都是按位计算的,所以第一步就是先把数据转成二进制,然后相应位进行…