关于问题数据库中间件是什么?一共有 2 位热心网友为你解答:
【1】、来自网友【数据库架构师之路】的最佳回答:
数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多表,数据库中间件主要能力:
- 支持读写分离
- 支持从库读负载均衡
- 支持分库操作
- 支持分表操作
- 支持跨库关联查询
- 对事务处理的支持
- 数据安全审计能力
主流的中间件方案主要有两种:
1、 服务端代理模式:需要独立部署一个代理服务,该代理服务后面管理多个数据库实例,在应用中通过一个数据源与该代理服务器建立连接,由该代理去操作底层数据库,并返回相应结果。优点是支持多语言,对业务透明,缺点是实现复杂,实现难度大,同时代理需要确保自身高可用
2、 客户端代理:在连接池或数据库驱动上进行一层封装,内部与不同的数据库建立连接,并对 SQL 进行必要的操作,比如读写分离选择走主库还是从库,分库分表 select 后如何聚合结果。优点是实现简单,天然去中心化,缺点是支持语言较少,版本升级困难
现在国内比较火的中间件如 sharding-proxy,国外如 proxysql 等,如下为一个 sharding-proxy 示例:
服务端模式
客户端模式
【2】、来自网友【会点代码的大叔】的最佳回答:
谢邀~
关于数据库中间件,我谈谈自己的见解,并介绍一下常见的数据库中间件。
中间件是什么
首先看看中间件的定义:
和业务无关的的技术类组件
。这种解释还是稍微有些抽象,下面我举个例子:
我辞职去卖羊肉串(业务端),联系了很多养殖场(底层),为了羊肉的质量和降低成本,我得一家一家地去考察、谈判、比价,然后选一个羊肉供货商合作。经营了一段时间,这个卖羊肉的涨价了,或者提供的羊肉质量没原来好了,那么我就重新考察、谈判、比价,如此反复,我会浪费大量的时间和经历。
于是我找了个信得过的代理公司(中间件),约定好羊肉的质量规格,谈好价钱,以后我只找代理拿货,具体代理找哪个养殖场合作,挣多少差价,我不管。
所以中间件的作用是:让业务端和底层解耦,屏蔽底层困难的逻辑,提供更简单的服务,让业务端的开发更简单。
数据库中间件
再来看看什么是数据库中间件。
在这里,数据库就是底层,我们写的程序就是业务端,数据库中间件就是(和业务无关)的可以实现数据库一些功能的组件。还是有些抽象,那么看看常见的数据库组件有哪些吧。
-
分库分表(分布式)
:当数据量大的时候,单台数据库已经不足以支撑我们的业务量,所以会采用分库分表的策略。现在支持分库分表的组件有很多,例如 MyCat、MySQL-Proxy、Atlas(360)、Cobar(阿里)、TDDL(淘宝,新名字 DRDS)。
-
数据库同步
:顾名思义,是对数据库进行同步的;Otter(阿里),基于数据库增量日志解析,准实时同步数据,支持两个库都可以写入,写入的数据同步到另外的库。
-
数据库迁移
:这个主要用于不同类型数据库的迁移;yugong(阿里),支持 Oracle 到 Mysql 的迁移。
-
数据增量订阅与消费
:这个是对数据库增量日志解析,提供增量数据订阅和消费;canal(阿里)。
听过了这些数据库中间件的介绍,是不是理解起来更深刻了。
比如分库分表的中间件,如果自己实现的话,就需要连接多个数据源(或多个表),执行一次查询,每个数据源都需要调用一次,查询回来的数据还需要自己处理;
如果有了中间件做这些工作,我们的开发会更加的简单。