python的数据库中间件_数据库中间件设计方案

数据库中间件的主要作用是向应用程序开发人员屏蔽读写分离和分库分表面临的挑战,并隐藏底层实现细节,使得开发人员可以像操作单库单表那样去操作数据。在介绍分库分表的主流设计方案前,我们首先回顾一下在单个库的情况下,应用的架构,可以用下图进行描述:

可以看到在操作单库单表的情况下,我们是直接在应用中通过数据源(c3p0、druid、dbcp等)与数据库建立连接,进行读写操作。而对于读写分离和分库分表,应用都要操作多个数据库实例,在这种情况下,我们就需要使用到数据库中间件。

1 主流的数据库中间件设计方案

典型的数据库中间件设计方案有2种:服务端代理(代理数据库)、客户端代理(代理数据源)。下图演示了这两种方案的架构:

可以看到不论是代理数据库还是代理数据源,底层都操作了多个数据库实例。不同的是:

在数据库代理中:

我们独立部署一个代理服务,这个代理服务背后管理多个数据库实例。而在应用中,我们通过一个普通的数据源(c3p0、druid、dbcp等)与代理服务器建立连接,所有的sql操作语句都是发送给这个代理,由这个代理去操作底层数据库,得到结果并返回给应用。在这种方案下,分库分表和读写分离的逻辑对开发人员是完全透明的。

在数据源代理中:

应用程序需要使用一个特定的数据源,其作用是代理,内部管理了多个普通的数据源(c3p0、druid、dbcp等),每个普通数据源各自与不同的库建立连接。应用程序产生的sql交给数据源代理进行处理,数据源内部对sql进行必要的操作,如sql改写等,然后交给各个普通的数据源去执行,将得到的结果进行合并,返回给应用。数据源代理通常也实现了JDBC规范定义的API,因此能够直接与orm框架整合。

2 主流的数据库中间件实现

无论是代理数据库,还是代理数据源,二者的作用都是类似的。以下列出了这两种方案目前已有的实现以及各自的优缺点:

数据库代理

目前的实现方案有:阿里巴巴开源的cobar,mycat团队在cobar基础上开发的mycat,mysql官方提供的mysql-proxy,奇虎360在mysql-proxy基础开发的atlas。目前除了mycat,其他几个项目基本已经没有维护。

优点:多语言支持。也就是说,不论你用的php、java或是其他语言,都可以支持。原因在于数据库代理本身就实现了mysql的通信协议,你可以就将其看成一个mysql 服务器。mysql官方团队为不同语言提供了不同的客户端却动,如java语言的mysql-connector-java,python语言的mysql-connector-python等等。因此不同语言的开发者都可以使用mysql官方提供的对应的驱动来与这个代理服务器建通信。

缺点:实现复杂。因为代理服务器需要实现mysql服务端的通信协议,因此实现难度较大。

数据源代理

目前的实现方案有:阿里巴巴开源的tddl,大众点评开源的zebra,当当网开源的sharding-jdbc。需要注意的是tddl的开源版本只有读写分离功能,没有分库分表,且开源版本已经不再维护。大众点评的zebra开源版本代码已经很久更新,基本上处于停滞的状态。当当网的sharding-jdbc目前算是做的比较好的,代码时有更新,文档资料比较全。

优点:更加轻量,可以与任何orm框架整合。这种方案不需要实现mysql的通信协议,因为底层管理的普通数据源,可以直接通过mysql-connector-java驱动与mysql服务器进行通信,因此实现相对简单。

缺点:仅支持某一种语言。例如tddl、zebra、sharding-jdbc都是使用java语言开发,因此对于使用其他语言的用户,就无法使用这些中间件。版本升级困难,因为应用使用数据源代理就是引入一个jar包的依赖,在有多个应用都对某个版本的jar包产生依赖时,一旦这个版本有bug,所有的应用都需要升级。而数据库代理升级则相对容易,因为服务是单独部署的,只要升级这个代理服务器,所有连接到这个代理的应用自然也就相当于都升级了。

ORM框架代理:

目前有hibernate提供的hibernate-shards,也可以通过mybatis插件的方式编写。相对于前面两种方案,这种方案可以说是只有缺点,没有优点。

Dragon项目采用的方案是代理客户端数据源的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 内核重定位,Linux 内核学习笔记:预备知识之“目标文件”

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?本文主要阐述 Linux 的目标文件(有可重定位目标文件、可执行目标文件和共享目标文件三种形式),并把重点放在其格式和案例分析上。注:一般情…

python源码脚本实例_python编写一个会算账的脚本的示例代码

python算账脚本1.假如小明卡里有10000元去商场买东西发现钱不够又向父母借了5000账单如下2.以下脚本就能实现上面的运算from time import strftimeimport pickleimport ostry:def save():data strftime(\033[35m%Y-%m-%d\033[0m)money int(input(How much do you have to sav…

linux虚拟内存api,Linux虚拟内存空间分布-Go语言中文社区

平常总说cpu的位数,其实说的是cpu一次能运算的最长整数的宽度,既ALU(算术逻辑单元)的宽度。cpu的位数也是数据总线的条数数据总线:数据线的总和,数据线就是cpu与内存进行数据传递的通道,一条数据线,一次可以…

2019 d serv 激活_化疗过程中肌肉减少症的发生机制及维生素D、ω-3脂肪酸的作用...

文章来源:蔡丽雅,赵文芝,杨振鹏,贺源,邓丽,张艳,石汉平.肿瘤化疗过程中肌肉减少症的发生机制及维生素D、ω-3脂肪酸的作用[J].中国医学前沿杂志(电子版),2020,12(1):13-19.正 文1998年,Baumgartner等【1】首次提出“肌肉减少症”的概念,用以描…

电脑鸿蒙运行Linux程序,Linux下的Hi3861一站式鸿蒙开发烧录(附工具)-鸿蒙开发烧录工具软件电脑版-东坡下载...

HarmonyOS 智能设备一站式集成开发环境,支持 HarmonyOS 组件按需定制、一键编译和烧录、可视化调试、分布式能力集成等,帮助开发者高效开发和创新新硬件。介绍2021春节前夕,华为发布了 HUAWEI DevEco Device Tool 2.0 Beta1,整体提…

终端软件_DMSTerminal现场管控终端软件正式发布

目前军工企业的信息化建设及管理大多停留在企业内部的管理层,各种任务信息、作业流程等无法直接下达到真正的一线现场层,导致工作在一线的大量技术人员仍然使用传统的纸质工单、纸质记录、口头交流等工作模式进行现场工作。很多工作模式普遍都是以人力来…

深度残差网络_注意力机制+软阈值化=深度残差收缩网络

顾名思义,深度残差收缩网络是由“残差网络”和“收缩”两部分所组成的,是在“残差网络”基础上的一种改进算法。其中,残差网络在2016年斩获了ImageNet图像识别竞赛的冠军,目前已经成为了深度学习领域的基础网络;收缩就…

linux 网络io命令详解,Linux下五种网络IO模型详解

本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, asynchronous IO的基本原理,更好的理解在高级语言中的异步编程,一起来看看吧,希望对大家学习linux有所帮助。…

在python语言中语句的续行符是_Python程序设计课后习题答案-第二单元(2页)-原创力文档...

习题 2一、选择题1.流程图中表示判断框的是( )。BA.矩形框 B .菱形框 C .平行四边形框 D .椭圆形框2 .下面不属于程序的基本控制结构的是( )。DA.顺序结构 B .选择结构 C &#xff0…

linux 终端显示白底,mac终端使用Item2无法显示颜色的解决方法

item2是mac,linux下非常好用的一款终端机,可自行配置主题并支持tab等多种功能。还在用单调的item吗?不妨试试item2吧!安装完后发现item2终端是没有颜色的(白底黑字),究其原因是Mac终端机预设是没有颜色区分的&#xff…

pve安装黑群晖直通硬盘_PVE+lede+DSM网卡硬盘直通+win10

本文目的:记录一下整个折腾过程,整理一下实现这一过程中看的资料,最重要的是我怕过段时间我给忘了。。。 虽然参照了不少过来人写的教程,但是还是遇到不少坑,反反复复折腾了一个月的时间(平时上班,只有晚上和周末能整一会)。 unraid我也折腾过了,确实不错,但是我没搞通…

linux kears 切换后端,如何更改Keras后端(哪里是json文件)?

我安装了Keras,并希望将后端切换到Theano . 我检查了this post,但仍然不知道在哪里放置创建的json文件 . 另外,下面是我在Python Shell中运行 import keras 时遇到的错误:使用TensorFlow后端 . 回溯(最近一次调用最后一次)&#x…

openstack资源使用汇总_关于OpenStack的学习路线及相关资源汇总

首先我们想学习openstack,那么openstack是什么?能干什么?涉及的初衷是什么?由什么来组成?刚接触openstack,说openstack不是一个软件,而是由多个组件进行组合,这是一个更深层次的理解&#xff0c…

安卓与Linux共存,Android和Linux重新合并成一个操作系统

Linux又回到了Android中,Android又回到了Linux中。Android一直都是Linux,但多年来Android项目走了自己的路,它的代码没有被合并回主Linux树中。现在,比Linux的创始人和主要开发人员Linux的预期要快得多,Android已经正式…

edit控件自动换行 mfc_VS2010/MFC编程入门:如何创建对话框模板和修改对话框属性?...

创建对话框主要分两大步,第一,创建对话框资源,主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件;第二,生成对话框类,主要包括新建对话框类、添加控件变量和控件的消息处理函数等。在本节…

linux vim tag,Vim基础知识之ctags 及 Taglist 插件

Vim基础知识之ctags 及 Taglist 插件1. 我的界面2. ctagsexuberant ctags是一般Linux系统上缺省的ctags我的ctags版本:Exuberant Ctags 5.9~svn20110310简单介绍Used in at least 50 countries in all 7 continents (including Antarctica!)Supports 41 programming…

linux ps2键盘不能用,解决usb鼠标与ps2键盘合用时开机键盘失效

昨晚熬夜安装mac os 10.6.3 ,跟着教程一步一步走,终于晚装完毕。进入mac后发现,ps2接口的键盘无法使用,usb鼠标正常使用。由于经常捣鼓windows和咱的机箱,下意识想到拔掉键盘再重新插上就行,试了下&#xf…

oracle数据库有几个服务_oracle数据库可以有几个数据库

《Oracle数据库管理与维护实战》——1.1 Oracle产品组成本节书摘来自异步社区出版社《Oracle数据库管理与维护实战》一书中的第1章,第1.1节,作者: 何伟娜 , 常建功,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 Or…

linux上如何永久关闭selinux,Linux临时关闭和永久关闭SELinux

查看SELinux状态:[rootlocalhost ~]# getenforceEnforcing临时关闭SELinux:[rootlocalhost ~]# setenforce 0[rootlocalhost ~]# getenforcePermissive永久关闭SELinux:在 /etc/sysconfig/ 目录下修改配置文件 selinux[rootlocalhost ~]# vim /etc/sysconfig/selinux配置文件内…

python监控windows日志_Python 监控日志的简单示例

这篇文章主要为大家详细介绍了Python 监控日志的简单示例,具有一定的参考价值,可以用来参考一下。对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!一个简易的日志监控的脚本,功能如下&a…