CN107301179A - 数据库读写分离的方法和装置 - Google Patents
数据库读写分离的方法和装置 Download PDFInfo
- Publication number
- CN107301179A CN107301179A CN201610232623.0A CN201610232623A CN107301179A CN 107301179 A CN107301179 A CN 107301179A CN 201610232623 A CN201610232623 A CN 201610232623A CN 107301179 A CN107301179 A CN 107301179A
- Authority
- CN
- China
- Prior art keywords
- service request
- write
- mark value
- class
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了数据库读写分离方法和装置。所述方法的一具体实施方式包括:通过web接入层获取用户的业务请求;根据所述业务请求的业务类型命名所述业务请求的业务方法;通过预先声明的面向切面编程拦截类拦截所述业务方法;根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。该实施方式实现了数据库的读写分离。
Description
技术领域
本申请涉及计算机技术领域,具体涉及互联网技术领域,尤其涉及数据库读写分离的方法和装置。
背景技术
随着互联网的发展,大型数据库的应用已经成为web应用中不可缺少的部分。在大量数据并发访问数据库的时候,数据库读写次数巨大,造成数据库访问压力成倍增加。在日常的Java web应用后台业务实现场景中,为了分散数据库压力,有很多是配置了多个数据源的,而通常情况下,每个数据源都对应了一个单独的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、数据库的主库104和数据库的从库105。网络102用以在终端设备1012和服务器103之间提供通信链路的介质。网络102可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用任务请求设备101通过网络102访问数据库,对数据库进行读写操作。
任务请求设备101可以是具有显示屏并且支持网络通信的各种电子设备,能够通过网络或在本地对数据库进行读或写操作。可以是用户的终端设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等;还可以是后台的操作管理设备,包括在后台对数据库进行操作管理的计算机设备。
服务器103可以是提供各种服务的服务器,例如对任务请求设备101上用户操作提供支持的后台管理服务器。后台管理服务器可以对接收到终端用户的用户请求数据进行分析处理,将用户请求引导到不同的数据库进行分发、存储和逻辑处理操作,并将操作结果反馈给任务请求设备。
数据库的主库104用于实现数据的变更操作,如对数据进行改动、新增数据或数据的删除需要访问数据库主库;数据库的从库105用于读数据操作,如从数据库从库中获取数据。
需要说明的是,本申请实施例所提供的数据库读写分离的方法一般由服务器103执行,相应地,数据库读写分离装置一般设置于服务器103中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,示出了根据本申请的数据库读写分离方法的一个实施例的流程200。所述的数据库读写分离方法,包括以下步骤:
步骤201,通过web接入层获取用户的业务请求。
在本实施例中,数据库读写分离方法运行于其上的电子设备(例如图1所示的服务器)可以通过有线连接方式或者无线连接方式从用户利用其进行业务操作的终端接收用户的业务请求,或从后台操作管理设备接收管理操作用户的业务请求。其中,上述用户的业务请求可以是对从终端的用户得到的数据或从后台管理设备的用户得到数据进行处理的请求,还可以是终端的用户或后台管理设备的用户从数据库中获取数据信息的请求。
步骤202,根据业务请求的业务类型命名业务请求的业务方法。
在本实施例中,基于步骤201中得到用户的业务请求,上述电子设备可以首先判断上述业务请求的业务类型,这里,业务请求的业务类型是指用户的业务请求所要进行的操作业务的类别;业务类型包括数据获取和变更数据,其中,数据获取是用户请求的操作是从数据库获取数据,也就是读数据库;变更数据是用户请求的操作是变更数据库中的数据,可以是对数据库中的数据进行更改、新增、删除的操作,是对数据库进行写操作。根据数据库的业务类型中的数据获取或变更数据命名上述业务请求的业务方法。这里,命名上述业务方法可以是在业务请求的类名之前加注解,还可以是在方法名之前加注解或者还可以在属性名之前加注解。本实施例中,当上述业务请求的类型是数据获取,可以在业务请求的方法名之前加操作从库的注解;当上述业务请求的类型是变更数据,可以在业务请求的方法名之前加操作主库的注解,例如,声明一个Java的注解类:@DBSourceMaster,将注解@DBSourceMaster标注到需要访问主库的任一Java业务方法上。
在本实施例的一些可选的实现方式中,对上述电子设备根据业务请求的业务类型命名业务请求的业务方法,包括:为上述业务请求分配处理线程;标记该处理线程,并将标记值存储于处理线程的局部变量中;根据处理线程的标记值命名业务请求的业务方法。这里,上述电子设备判断用户的业务请求的业务类型,确定出上述业务请求所要进行的操作,由上述所要进行的操作为该业务请求的处理线程添加区别上述操作的标记,该标记的标记值与添加到业务方法的注解类对应。这里,在上述电子设备的缓存区域预设业务动作配值列表,用于标识处理线程的标记值和标注于业务方法类上的注解之间的对应关系。其中,将标记的标记值存储于处理线程的局部变量(Thread Local)中,处理线程的局部变量是指在面向对象的程序语言中出现在程序或处理线程中可以访问的变量;上述电子设备判断处理线程的标记值,由上述标记值命名该业务请求的方法。例如,上述业务请求为请求修改数据库中指定位置的数据,上述业务请求的处理线程的局部变量中存储有处理线程的标记值,由上述标记值可以确定出该处理请求需要访问主库,所以在上述业务请求的业务方法上标注注解@DBSourceMaster。
步骤203,通过预先声明的面向切面编程拦截类拦截该业务方法。
在本实施例中,上述电子设备上可以预先声明一个面向切面编程(AOP,Aspect Oriented Programming)拦截类,用于拦截处理标注了与该面向切面编程拦截类一致注解类的业务方法。如,在步骤202中声明的一个的Java注解类,在上述访问主库的业务方法上标注上述声明的Java注解类,这里,声明一个注解类只是为了配合面向切面编程拦截类进行方法拦截,通过使用注解,可以不侵入原有业务方法的java实现逻辑,只需要在目标业务方法名前加一行注解就行,原有业务实现逻辑可不做任何改动。上述面向切面编程拦截类则被配置为只拦截标注了注解的业务方法。
在本实施例的一些可选的实现方式中,上述电子设备通过预先声明的面向切面编程拦截类拦截业务方法,包括:声明一个面向切面编程注解类,这里,可以声明一个Java AOP注解类,如:@DBSourceMaster;将上述面向切面编程注解类标注到需要访问主库的任一业务方法上,如,将上述注解@DBSourceMaster标注到需要访问主库的任一Java业务方法上。配置面向切面编程拦截类,拦截具有上述面向切面编程注解类标注的业务方法。例如,声明一个面向切面编程环绕型拦截类,这里,可以声明一个DBSourceMasterInterceptor的面向切面编程的拦截类,其中,上述面向切面编程拦截类DBSourceMasterInterceptor为只拦截标注了@DBSourceMaster注解的业务方法。
步骤204,根据面向切面编程拦截类的拦截结果将业务请求链接到数据库的主库进行相应的写操作,或将业务请求链接到数据库的从库进行相应的读操作。
在本实施例中,上述电子设备可以通过步骤203获取上述面向切面编程拦截类拦截上述业务方法的拦截结果,上述拦截结果包括:当业务请求的业务方法上标注的注解与面向切面编程拦截类的注解一致时,将上述业务请求链接到数据库的主库进行相应的写操作;当业务请求的业务方法上标注的注解与面向切面编程拦截类的注解不一致时,将上述业务请求链接到数据库的从库进行相应的读操作。这里,可以通过判断处理线程的标记值确定出拦截结果。
继续参见图3,图3是根据本实施例的数据库读写分离方法中的根据业务请求的业务类型命名业务请求的业务方法的应用场景的一个示意图。在图3的应用场景中,用户首先发出一个访问数据库中数据的业务请求301,然后判断上述业务请求所要进行的操作302,将上述操作与预设的业务动作配值列表303中的业务动作匹配,获取操作标记数据304,为上述操作配值;为上述业务请求分配处理线程,并依据操作配值标记处理线程;将标记数据存储于处理线程的局部变量中,例如将对数据进行更改、新增、删除的操作分别标记为11、12、13,将对数据进行获取的操作标记为04。上述电子设备计算标记数据,得到处理线程的标记值305,根据标记值确定出业务类型,如,通过判断标记数据的首位,如果首位为1,则上述业务请求的业务类型为变更数据,如果首位为0,则上述业务请求的业务类型为数据获取。将业务类型为变更数据的数据请求的业务方法标注访问主库的注解类,将业务类型为数据获取的数据请求的业务方法标注访问从库的注解类。
本申请的上述实施例提供的方法通过在业务请求的业务方法上标注注解,使用预先声明的面向切面编程的拦截类,拦截上述业务请求,将访问数据库的业务请求链接到数据库主库进行写操作或链接到数据库的从库进行读操作,实现数据库的读写分离。
进一步参考图4,其示出了数据库读写分离方法的又一个实施例的流程400。该数据库读写分离方法的流程400,包括以下步骤:
步骤401,通过web接入层获取用户的业务请求。
在本实施例中,数据库读写分离方法运行于其上的电子设备(例如图1所示的服务器)可以通过有线连接方式或者无线连接方式从用户利用其进行业务操作的终端接收用户的业务请求,或从后台操作管理设备接收管理操作用户的业务请求。
步骤402,根据业务请求的业务类型命名业务请求的业务方法。
在本实施例中,上述电子设备通过对在步骤401中获取到的业务请求可以首先判断该业务请求的业务类型,其中,业务请求的业务类型是指用户的业务请求所要进行的操作业务的类别;业务类型包括数据获取和变更数据,其中,数据获取是用户请求的操作是从数据库获取数据,也就是读数据库;变更数据是用户请求的操作是变更数据库中的数据,可以是对数据库中的数据进行更改、新增、删除的操作,变更数据是对数据库进行写操作。命名业务请求的业务方法是在业务请求的方法名之前加注解,在业务类型为数据获取的业务请求的业务方法之前添加访问从库的注解类,在业务类型为变更数据的业务请求的业务方法之前添加访问主库的注解类。
在本实施例中,除根据用户的业务请求的业务类型在业务方法上添加注解外,还根据业务类型对处理线程进行标记,将标记数据储存于局部变量中。这里,通过确定业务请求的业务类型,为上述业务请求分配处理线程;根据业务类型为处理线程标记,并将标记数据存储于处理线程的局部变量中。作为示例,可以将对数据进行更改、新增、删除的操作分别标记为11、12、13,将对数据进行获取的操作标记为04。上述电子设备可以根据业务请求的处理线程的标记数据命名业务方法。
步骤403,通过预先声明的面向切面编程拦截类拦截业务方法。
在本实施例中,上述电子设备预先声明一个面向切面编程的拦截类,用于拦截上述用户的业务请求,这里通过判断用户的业务请求的业务方法上标注的注解类与上述声明的面向切面编程的拦截类是否一致实现对与业务请求的拦截。
步骤404,确定处理线程的局部变量存储的标记值。
在本实施例中,利用步骤403的拦截结果,确定处理线程的局部变量存储的标记值,上述标记值存储于处理线程的局部变量中,是处理线程中的标记首位为1的标记次数。标记值的计算是对线程中标记数据的首位数做求和运算得到。这里,当标记值大于0时,表示上述处理线程中具有业务类型是变更数据的业务请求,当标记值为0时,表示上述处理线程中只具有业务类型是数据获取的业务请求。
在本实施例的一些可选的实现方式中,获取上述标记值还可以由下述方式得到:对用户的业务请求进行解析,将该业务请求分解为不少于一个的操作动作,如对数据进行更改、新增、删除;将上述操作动作中的每一个操作动作分别与预设的业务动作配值列表中的列表操作动作进行匹配;其中,业务动作配值列表中列出了列表操作动作以及与列表操作动作对应的配值。提取与上述操作动作匹配的列表操作动作对应的配值作为该业务请求处理线程的标记数据,将上述标记数据储存于处理线程的局部变量中;对处理线程的局部变量中的标记数据进行运算得到标记值,如,标记值是上述业务请求分解后的操作动作对应标记数据的首位数之和,将上述标记值储存于处理线程的局部变量中。
步骤405,根据面向切面编程拦截类的拦截结果将业务请求链接到数据库的主库进行相应的写操作,或将业务请求链接到数据库的从库进行相应的读操作。
在本实施例中,上述电子设备可以依据步骤403的拦截结果将业务请求链接到数据库的主库或从库。当业务请求的业务方法上标注的注解与面向切面编程拦截类的注解一致时,将上述业务请求链接到数据库的主库进行相应的写操作;当业务请求的业务方法上标注的注解与面向切面编程拦截类的注解不一致时,将上述业务请求链接到数据库的从库进行相应的读操作。
在本实施例的一些可选的实现方式中,上述拦截结果可以通过判断处理线程的标记值确定。这里,通过判断处理线程的局部变量存储的标记值是否大于0,确定上述用户的业务请求中是否有业务类型是变更数据的操作。如果标记值大于0,将上述业务请求链接到数据库的主库进行写操作;如果标记值小于等于0,将上述业务请求链接到数据库的从库进行读操作。
在本实施例的一些可选的实现方式中,上述判断标记值还包括:判断将标记值大于0的业务请求链接到数据库的主库进行写操作是否执行完毕;如果是,判断处理线程中线程的局部变量的标记值减1后是否小于或等于0,如果标记值减1后小于或等于0,清除上述标记值;如果标记值减1后大于0,将业务请求重新链接到数据库主库进行处理。当业务请求的处理线程结束后,web服务器的线程池回收上述处理线程。这里,如果标记值减1后大于0,是业务请求中出现了嵌套的子业务,并且嵌套的子业务中仍然有业务类型为变更数据的业务请求。
从图4中可以看出,与图2对应的实施例相比,本实施例中的数据库读写分离方法的流程400突出了对存储于处理线程的局部变量的标记值确定,根据标记值将用户的业务请求链接到数据库的主库或数据库的从库,实现数据库的读写分离。
进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种数据库读写分离装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图5所示,本实施例所述的数据库读写分离装置500包括:请求接收单元501、方法标记单元502、拦截单元503和分发单元504。其中,请求接收单元501配置用于通过web接入层获取用户的业务请求;方法标记单元502配置用于根据所述业务请求的业务类型命名所述业务请求的业务方法,所述业务请求的业务类型包括数据获取和变更数据;拦截单元503配置用于通过预先声明的面向切面编程拦截类拦截所述业务方法;分发单元504配置用于根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。
在本实施例中,数据库读写分离装置500的请求接收单元501可以通过有线连接方式或者无线连接方式从用户利用其进行业务操作的终端接收用户的业务请求,或从后台操作管理设备接收管理操作用户的业务请求。
在本实施例中,基于请求接收单元501得到的用户的业务请求,上述方法标记单元502可以首先判断获取到的用户的业务请求的业务类型,这里,业务请求的业务类型是指用户的业务请求所要进行的操作业务的类别;业务类型包括数据获取和变更数据,根据数据库的业务类型中的数据获取或变更数据命名业务请求的业务方法。
在本实施例中,数据库读写分离装置500上可以预先声明一个面向切面编程拦截类,由此,拦截单元503通过上述预先声明的一个面向切面编程拦截类拦截处理标注了与面向切面编程拦截类一致注解的业务方法。
在本实施例中,上述分发单元504可以通过上述拦截单元503的拦截结果,将用户的业务请求链接到数据库的主库或从库。这里,当业务请求的业务方法上标注的注解与面向切面编程拦截类的注解一致时,将上述业务请求链接到数据库的主库进行相应的写操作;当业务请求的业务方法上标注的注解与面向切面编程拦截类的注解不一致时,将上述业务请求链接到数据库的从库进行相应的读操作。
在本实施例的一些可选的实现方式中,方法标记单元502进一步配置用于:确定业务请求的业务类型,为业务请求分配处理线程;标记处理线程,并将标记值存储于处理线程的局部变量中;根据处理线程的标记值命名业务请求的业务方法。
在本实施例的一些可选的实现方式中,拦截单元503还配置用于:声明一个面向切面编程注解类;将上述面向切面编程注解类标注到需要访问主库的任一业务方法上;配置面向切面编程拦截类,拦截具有上述面向切面编程注解类标注的业务方法。
在本实施例的一些可选的实现方式中,方法标记单元502进一步配置用于:解析业务请求,将业务请求分解为不少于一个的操作动作;将上述操作动作中的每一个操作动作分别与预设的业务动作配值列表中的列表操作动作进行匹配;根据与上述操作动作匹配的列表操作动作的对应配值确定出业务请求的业务动作配值;将业务动作配值存储于处理线程的局部变量中作为上述处理线程的标记值。
在本实施例的一些可选的实现方式中,分发单元504进一步配置用于:判断处理线程的局部变量存储的标记值;将标记值大于0的业务请求链接到数据库的主库进行写操作;将标记值小于等于0的业务请求链接到数据库的从库进行读操作。
在本实施例的一些可选的实现方式中,分发单元504进一步配置用于:判断将标记值大于0的业务请求链接到数据库的主库进行写操作是否执行完毕;如果是,判断处理线程中线程的局部变量的标记值减1后是否小于或等于0;如果标记值减1后小于或等于0,清除上述标记值;web服务器的线程池回收处理线程。
本申请的上述实施例提供的装置通过方法标记单元502在业务请求的业务方法上标注注解,使用拦截单元503预先声明的面向切面编程的拦截类,拦截上述业务请求,通过分发单元504将访问数据库的业务请求链接到数据库主库进行写操作或链接到数据库的从库进行读操作,实现数据库的读写分离。
下面参考图6,其示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统600的结构示意图。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的方法中限定的上述功能。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括请求接收单元、方法标记单元、拦截单元和分发单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,请求接收单元还可以被描述为“接收用户的操作请求的单元”。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:通过web接入层获取用户的业务请求;根据所述业务请求的业务类型命名所述业务请求的业务方法,所述业务请求的业务类型包括数据获取和变更数据;通过预先声明的面向切面编程拦截类拦截所述业务方法;根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (12)
1.一种数据库读写分离方法,其特征在于,所述方法包括:
通过web接入层获取用户的业务请求;
根据所述业务请求的业务类型命名所述业务请求的业务方法,所述业务请求的业务类型包括数据获取和变更数据;
通过预先声明的面向切面编程拦截类拦截所述业务方法;
根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。
2.根据权利要求1所述的数据库读写分离方法,其特征在于,所述根据所述业务请求的业务类型命名所述业务请求的业务方法,包括:
确定所述业务请求的业务类型,为所述业务请求分配处理线程;
标记所述处理线程,并将标记值存储于处理线程的局部变量中;
根据所述处理线程的标记值命名所述业务请求的业务方法。
3.根据权利要求1所述的数据库读写分离方法,其特征在于,所述通过预先声明的面向切面编程拦截类拦截所述业务方法,包括:
声明一个面向切面编程注解类;
将所述面向切面编程注解类标注到需要访问主库的任一业务方法上;
配置面向切面编程拦截类,拦截所述具有所述面向切面编程注解类标注的业务方法。
4.根据权利要求2所述的数据库读写分离方法,其特征在于,所述标记所述处理线程,并将标记值存储于处理线程的局部变量中,包括:
解析所述业务请求,将所述业务请求分解为不少于一个的操作动作;
将所述不少于一个的操作动作中的每一个操作动作分别与预设的业务动作配值列表中的列表操作动作进行匹配;
根据与所述操作动作匹配的列表操作动作的对应配值确定出所述业务请求的业务动作配值;
分析所述业务动作配值,得到所述处理线程的标记值;
将所述标记值储存于所述处理线程的局部变量中。
5.根据权利要求4所述的数据库读写分离方法,其特征在于,所述根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作,包括:
判断所述处理线程的局部变量存储的标记值;
将标记值大于0的业务请求链接到数据库的主库进行写操作;
将标记值小于等于0的业务请求链接到数据库的从库进行读操作。
6.根据权利要求5所述的数据库读写分离方法,其特征在于,所述根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作,还包括:
判断所述将标记值大于0的业务请求链接到数据库的主库进行写操作是否执行完毕;
如果是,判断所述处理线程中线程的局部变量的标记值减1后是否小于或等于0;
如果所述标记值减1后小于或等于0,清除所述标记值;
web服务器的线程池回收所述处理线程。
7.一种数据库读写分离装置,其特征在于,所述装置包括:
请求接收单元,配置用于通过web接入层获取用户的业务请求;
方法标记单元,配置用于根据所述业务请求的业务类型命名所述业务请求的业务方法,所述业务请求的业务类型包括数据获取和变更数据;
拦截单元,配置用于通过预先声明的面向切面编程拦截类拦截所述业务方法;
分发单元,配置用于根据所述面向切面编程拦截类的拦截结果将所述业务请求链接到数据库的主库进行相应的写操作,或将所述业务请求链接到数据库的从库进行相应的读操作。
8.根据权利要求7所述的数据库读写分离装置,其特征在于,所述方法标记单元进一步配置用于:
确定所述业务请求的业务类型,为所述业务请求分配处理线程;
标记所述处理线程,并将标记值存储于处理线程的局部变量中;
根据所述处理线程的标记值命名所述业务请求的业务方法。
9.根据权利要求7所述的数据库读写分离装置,其特征在于,所述拦截单元还配置用于:
声明一个面向切面编程注解类;
将所述面向切面编程注解类标注到需要访问主库的任一业务方法上;
配置面向切面编程拦截类,拦截所述具有所述面向切面编程注解类标注的业务方法。
10.根据权利要求8所述的数据库读写分离装置,其特征在于,方法标记单元进一步配置用于:
解析所述业务请求,将所述业务请求分解为不少于一个的操作动作;
将所述不少于一个的操作动作中的每一个操作动作分别与预设的业务动作配值列表中的列表操作动作进行匹配;
根据与所述操作动作匹配的列表操作动作的对应配值确定出所述业务请求的业务动作配值;
分析所述业务动作配值,得到所述处理线程的标记值;
将所述标记值储存于所述处理线程的局部变量中。
11.根据权利要求8所述的数据库读写分离装置,其特征在于,所述分发单元进一步配置用于:
判断所述处理线程的局部变量存储的标记值;
将标记值大于0的业务请求链接到数据库的主库进行写操作;
将标记值小于等于0的业务请求链接到数据库的从库进行读操作。
12.根据权利要求11所述的数据库读写分离装置,其特征在于,所述分发单元进一步配置用于:
判断所述将标记值大于0的业务请求链接到数据库的主库进行写操作是否执行完毕;
如果是,判断所述处理线程中线程的局部变量的标记值减1后是否小于或等于0;
如果所述标记值减1后小于或等于0,清除所述标记值;
web服务器的线程池回收所述处理线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610232623.0A CN107301179A (zh) | 2016-04-14 | 2016-04-14 | 数据库读写分离的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610232623.0A CN107301179A (zh) | 2016-04-14 | 2016-04-14 | 数据库读写分离的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107301179A true CN107301179A (zh) | 2017-10-27 |
Family
ID=60136583
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610232623.0A Pending CN107301179A (zh) | 2016-04-14 | 2016-04-14 | 数据库读写分离的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107301179A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019131A (zh) * | 2017-12-08 | 2019-07-16 | 北京京东尚科信息技术有限公司 | 一种复盘业务的方法和装置 |
CN110096552A (zh) * | 2019-05-07 | 2019-08-06 | 广州虎牙信息科技有限公司 | 一种业务数据的读、写方法、装置、设备和存储介质 |
CN110262854A (zh) * | 2019-05-21 | 2019-09-20 | 深圳壹账通智能科技有限公司 | 多源数据处理方法及终端设备 |
CN110442636A (zh) * | 2019-08-22 | 2019-11-12 | 迈普通信技术股份有限公司 | 一种数据的读写方法、装置及数据读写设备 |
CN112231597A (zh) * | 2020-09-28 | 2021-01-15 | 北京金山云网络技术有限公司 | 一种分页数据的查询方法、装置及电子设备 |
CN113761038A (zh) * | 2020-09-29 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 数据源读写分离方法和装置 |
CN114064807A (zh) * | 2021-11-29 | 2022-02-18 | 四川虹美智能科技有限公司 | 用户系统及其数据提供方法 |
CN114253770A (zh) * | 2021-12-17 | 2022-03-29 | 苏州浪潮智能科技有限公司 | 一种数据库的主从备份系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090300018A1 (en) * | 2006-10-05 | 2009-12-03 | International Business Machines Corporation | Data processing system and method of handling requests |
CN102541923A (zh) * | 2010-12-30 | 2012-07-04 | 北京新媒传信科技有限公司 | 一种数据库读写分离的方法和装置 |
CN102622427A (zh) * | 2012-02-27 | 2012-08-01 | 杭州闪亮科技有限公司 | 读写分离数据库的方法及系统 |
CN103530427A (zh) * | 2013-11-04 | 2014-01-22 | 北京京东尚科信息技术有限公司 | 一种基于多数据库的动态切换方法和装置 |
CN103559118A (zh) * | 2013-10-12 | 2014-02-05 | 福建亿榕信息技术有限公司 | 一种基于aop与注解信息系统的安全审计方法 |
CN103793432A (zh) * | 2012-11-01 | 2014-05-14 | 深圳中兴网信科技有限公司 | 一种数据库读写分离方法及装置 |
-
2016
- 2016-04-14 CN CN201610232623.0A patent/CN107301179A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090300018A1 (en) * | 2006-10-05 | 2009-12-03 | International Business Machines Corporation | Data processing system and method of handling requests |
CN102541923A (zh) * | 2010-12-30 | 2012-07-04 | 北京新媒传信科技有限公司 | 一种数据库读写分离的方法和装置 |
CN102622427A (zh) * | 2012-02-27 | 2012-08-01 | 杭州闪亮科技有限公司 | 读写分离数据库的方法及系统 |
CN103793432A (zh) * | 2012-11-01 | 2014-05-14 | 深圳中兴网信科技有限公司 | 一种数据库读写分离方法及装置 |
CN103559118A (zh) * | 2013-10-12 | 2014-02-05 | 福建亿榕信息技术有限公司 | 一种基于aop与注解信息系统的安全审计方法 |
CN103530427A (zh) * | 2013-11-04 | 2014-01-22 | 北京京东尚科信息技术有限公司 | 一种基于多数据库的动态切换方法和装置 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019131A (zh) * | 2017-12-08 | 2019-07-16 | 北京京东尚科信息技术有限公司 | 一种复盘业务的方法和装置 |
CN110096552A (zh) * | 2019-05-07 | 2019-08-06 | 广州虎牙信息科技有限公司 | 一种业务数据的读、写方法、装置、设备和存储介质 |
CN110262854A (zh) * | 2019-05-21 | 2019-09-20 | 深圳壹账通智能科技有限公司 | 多源数据处理方法及终端设备 |
CN110442636A (zh) * | 2019-08-22 | 2019-11-12 | 迈普通信技术股份有限公司 | 一种数据的读写方法、装置及数据读写设备 |
CN112231597A (zh) * | 2020-09-28 | 2021-01-15 | 北京金山云网络技术有限公司 | 一种分页数据的查询方法、装置及电子设备 |
CN113761038A (zh) * | 2020-09-29 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 数据源读写分离方法和装置 |
CN114064807A (zh) * | 2021-11-29 | 2022-02-18 | 四川虹美智能科技有限公司 | 用户系统及其数据提供方法 |
CN114064807B (zh) * | 2021-11-29 | 2023-07-18 | 四川虹美智能科技有限公司 | 用户系统及其数据提供方法 |
CN114253770A (zh) * | 2021-12-17 | 2022-03-29 | 苏州浪潮智能科技有限公司 | 一种数据库的主从备份系统 |
CN114253770B (zh) * | 2021-12-17 | 2023-12-26 | 苏州浪潮智能科技有限公司 | 一种数据库的主从备份系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107301179A (zh) | 数据库读写分离的方法和装置 | |
US11620117B2 (en) | Systems and methods for code clustering analysis and transformation | |
US8495102B2 (en) | Method, system, and program product for organizing a database | |
CN108268253B (zh) | 接口代码生成方法及终端设备 | |
US11188319B2 (en) | Systems and methods for entry point-based code analysis and transformation | |
EP3321825A1 (en) | Validating data integrations using a secondary data store | |
US8886654B2 (en) | Infrastructure and architecture for development and execution of predictive models | |
CN109446099A (zh) | 自动化测试用例生成方法、装置、介质及电子设备 | |
CN107644286A (zh) | 工作流处理方法及装置 | |
JP4911438B2 (ja) | 操作監視装置 | |
US20150186808A1 (en) | Contextual data analysis using domain information | |
CN111427971B (zh) | 用于计算机系统的业务建模方法、装置、系统和介质 | |
CN109033403A (zh) | 用于搜索区块链数据的方法、装置及存储介质 | |
US8756205B2 (en) | System and method for rule-based data object matching | |
CN106776638A (zh) | 数据库操作方法和装置 | |
CN106600082A (zh) | 业务系统中任务的处理方法、装置及业务体系构建系统 | |
CN109308258A (zh) | 测试数据的构造方法、装置、计算机设备和存储介质 | |
CN107679065A (zh) | 数据展示方法、装置及计算机可读存储介质 | |
CN107679937B (zh) | 定制服务功能的方法、系统、存储介质及设备 | |
CN116594683A (zh) | 一种代码注释信息生成方法、装置、设备及存储介质 | |
CN115438740A (zh) | 一种多源数据的汇聚融合方法和系统 | |
CN112258244B (zh) | 确定目标物品所属任务的方法、装置、设备及存储介质 | |
CN110110153A (zh) | 一种节点搜索的方法和装置 | |
CN115543428A (zh) | 一种基于策略模板的模拟数据生成方法和装置 | |
CN110471859A (zh) | 业务测试方法、装置、介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171027 |
|
RJ01 | Rejection of invention patent application after publication |