数据库读写分离的方法和装置制造方法及图纸

技术编号:16472544 阅读:30 留言:0更新日期:2017-10-29 00:14
本申请公开了数据库读写分离方法和装置。所述方法的一具体实施方式包括:通过web接入层获取用户的业务请求;根据所述业务请求的业务类型命名所述业务请求的业务方法;通过预先声明的面向切面编程拦截类拦截所述业务方法;根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。该实施方式实现了数据库的读写分离。

Method and device for separating read and write of database

A method and device for separating read and write of a database are disclosed. Including a specific embodiment of the method: get the user access through the web layer service request; according to the service request of the type of business the business method named service request; by aspect oriented programming to intercept intercept class said business method declared in advance; according to the aspect oriented programming class results will intercept intercept the service request links to the main database to write the corresponding operations, or will the service request link to the database from the database to read the corresponding operation. This method realizes the separation of read and write of database.

【技术实现步骤摘要】
数据库读写分离的方法和装置
本申请涉及计算机
,具体涉及互联网
,尤其涉及数据库读写分离的方法和装置。
技术介绍
随着互联网的发展,大型数据库的应用已经成为web应用中不可缺少的部分。在大量数据并发访问数据库的时候,数据库读写次数巨大,造成数据库访问压力成倍增加。在日常的Javaweb应用后台业务实现场景中,为了分散数据库压力,有很多是配置了多个数据源的,而通常情况下,每个数据源都对应了一个单独的IP地址,而在这些数据库中,又需要把数据源分为主库与从库,主库主要用来承担写入数据的需求,同时可承担少量的数据查询需求,从库用来承担数据查询的需求,但不承担写入需求。那么,在不使用数据库中间件的情况下,我们就需要在调用端程序逻辑里面来实现主库与从库的分离调用。当前,主库和从库读写分离可使用如下方式实现:使用中间件产品实现负载平衡,读写分离;或通过sql语句判断执行来控制数据源的选择实现读写分离。然而,如果使用中间件,配置较为复杂,且不方便维护,一旦出错,只有依赖DBA进行处理,单纯的程序开发人员不便排查错误,其中,DBA是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,负责业务数据库从设计、测试到部署交付的全生命周期管理;如果在程序实现读写分离,每条sql执行时需判断当前使用主库还是从库,改造代码的嵌入量将是相当庞大。
技术实现思路
本申请的目的在于提出一种改进的数据库读写分离的方法和装置,来解决以上
技术介绍
部分提到的技术问题。第一方面,本申请提供了一种数据库读写分离方法,所述方法包括:通过web接入层获取用户的业务请求;根据所述业务请求的业务类型命名所述业务请求的业务方法,所述业务请求的业务类型包括数据获取和变更数据;通过预先声明的面向切面编程拦截类拦截所述业务方法;根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。在一些实施例中,所述根据所述业务请求的业务类型命名所述业务请求的业务方法,包括:确定所述业务请求的业务类型,为所述业务请求分配处理线程;标记所述处理线程,并将标记值存储于处理线程的局部变量中;根据所述处理线程的标记值命名所述业务请求的业务方法。在一些实施例中,所述通过预先声明的面向切面编程拦截类拦截所述业务方法,包括:声明一个面向切面编程注解类;将所述面向切面编程注解类标注到需要访问主库的任一业务方法上;配置面向切面编程拦截类,拦截所述具有所述面向切面编程注解类标注的业务方法。在一些实施例中,所述标记所述处理线程,并将标记值存储于处理线程的局部变量中,包括:解析所述业务请求,将所述业务请求分解为不少于一个的操作动作;将所述不少于一个的操作动作中的每一个操作动作分别与预设的业务动作配值列表中的列表操作动作进行匹配;根据与所述操作动作匹配的列表操作动作的对应配值确定出所述业务请求的业务动作配值;分析所述业务动作配值,得到所述处理线程的标记值;将所述标记值储存于所述处理线程的局部变量中。在一些实施例中,所述根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作,包括:判断所述处理线程的局部变量存储的标记值;将标记值大于0的业务请求链接到数据库的主库进行写操作;将标记值小于等于0的业务请求链接到数据库的从库进行读操作。在一些实施例中,所述根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作,还包括:判断所述将标记值大于0的业务请求链接到数据库的主库进行写操作是否执行完毕;如果是,判断所述处理线程中线程的局部变量的标记值减1后是否小于或等于0;如果所述标记值减1后小于或等于0,清除所述标记值;web服务器的线程池回收所述处理线程。第二方面,本申请提供了一种数据库读写分离装置,所述装置包括:请求接收单元,配置用于通过web接入层获取用户的业务请求;方法标记单元,配置用于根据所述业务请求的业务类型命名所述业务请求的业务方法,所述业务请求的业务类型包括数据获取和变更数据;拦截单元,配置用于通过预先声明的面向切面编程拦截类拦截所述业务方法;分发单元,配置用于根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。在一些实施例中,所述方法标记单元进一步配置用于:确定所述业务请求的业务类型,为所述业务请求分配处理线程;标记所述处理线程,并将标记值存储于处理线程的局部变量中;根据所述处理线程的标记值命名所述业务请求的业务方法。在一些实施例中,所述方法标记单元进一步配置用于:解析所述业务请求,将所述业务请求分解为不少于一个的操作动作;将所述不少于一个的操作动作中的每一个操作动作分别与预设的业务动作配值列表中的列表操作动作进行匹配;根据与所述操作动作匹配的列表操作动作的对应配值确定出所述业务请求的业务动作配值;分析所述业务动作配值,得到所述处理线程的标记值;将所述标记值储存于所述处理线程的局部变量中。在一些实施例中,所述分发单元进一步配置用于:判断所述处理线程的局部变量存储的标记值;将标记值大于0的业务请求链接到数据库的主库进行写操作;将标记值小于等于0的业务请求链接到数据库的从库进行读操作。在一些实施例中,所述分发单元进一步配置用于:判断所述将标记值大于0的业务请求链接到数据库的主库进行写操作是否执行完毕;如果是,判断所述处理线程中线程的局部变量的标记值减1后小于或等于0;如果所述标记值减1后小于或等于0,清除所述标记值;web服务器的线程池回收所述处理线程。本申请提供的数据库读写分离方法和装置,通过预先声明的面向切面编程拦截类拦截业务请求的业务方法,根据拦截结果将业务请求分发链接到数据库的主库进行相应的写操作,或链接到数据库的从库进行相应的读操作,实现数据库操作的读写分离。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1是本申请可以应用于其中的示例性系统架构图;图2是根据本申请的数据库读写分离方法的一个实施例的流程图;图3是根据本申请的数据库读写分离方法的一个应用场景的示意图;图4是根据本申请的数据库读写分离方法的又一个实施例的流程图;图5是根据本申请的数据库读写分离装置的一个实施例的结构示意图;图6是适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。具体实施方式下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关专利技术,而非对该专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关专利技术相关的部分。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。图1示出了可以应用本申请的数据库读写分离方法或数据库读写分离装置的实施例的示例性系统架构100。如图1所示,系统架构100可以包括任务请求设备101,网络102、服务器103、数据库的主库10本文档来自技高网...
数据库读写分离的方法和装置

【技术保护点】
一种数据库读写分离方法,其特征在于,所述方法包括:通过web接入层获取用户的业务请求;根据所述业务请求的业务类型命名所述业务请求的业务方法,所述业务请求的业务类型包括数据获取和变更数据;通过预先声明的面向切面编程拦截类拦截所述业务方法;根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。

【技术特征摘要】
1.一种数据库读写分离方法,其特征在于,所述方法包括:通过web接入层获取用户的业务请求;根据所述业务请求的业务类型命名所述业务请求的业务方法,所述业务请求的业务类型包括数据获取和变更数据;通过预先声明的面向切面编程拦截类拦截所述业务方法;根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。2.根据权利要求1所述的数据库读写分离方法,其特征在于,所述根据所述业务请求的业务类型命名所述业务请求的业务方法,包括:确定所述业务请求的业务类型,为所述业务请求分配处理线程;标记所述处理线程,并将标记值存储于处理线程的局部变量中;根据所述处理线程的标记值命名所述业务请求的业务方法。3.根据权利要求1所述的数据库读写分离方法,其特征在于,所述通过预先声明的面向切面编程拦截类拦截所述业务方法,包括:声明一个面向切面编程注解类;将所述面向切面编程注解类标注到需要访问主库的任一业务方法上;配置面向切面编程拦截类,拦截所述具有所述面向切面编程注解类标注的业务方法。4.根据权利要求2所述的数据库读写分离方法,其特征在于,所述标记所述处理线程,并将标记值存储于处理线程的局部变量中,包括:解析所述业务请求,将所述业务请求分解为不少于一个的操作动作;将所述不少于一个的操作动作中的每一个操作动作分别与预设的业务动作配值列表中的列表操作动作进行匹配;根据与所述操作动作匹配的列表操作动作的对应配值确定出所述业务请求的业务动作配值;分析所述业务动作配值,得到所述处理线程的标记值;将所述标记值储存于所述处理线程的局部变量中。5.根据权利要求4所述的数据库读写分离方法,其特征在于,所述根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作,包括:判断所述处理线程的局部变量存储的标记值;将标记值大于0的业务请求链接到数据库的主库进行写操作;将标记值小于等于0的业务请求链接到数据库的从库进行读操作。6.根据权利要求5所述的数据库读写分离方法,其特征在于,所述根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作,还包括:判断所述将标记值大于0的业务请求链接到数据库的主库进行写操作是否执行完毕;如果是,判断所述处理线程中线程的局...

【专利技术属性】
技术研发人员:刘鹏
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1