CN108153838B - 一种MySQL数据库中间件预处理方法 - Google Patents

一种MySQL数据库中间件预处理方法 Download PDF

Info

Publication number
CN108153838B
CN108153838B CN201711349470.9A CN201711349470A CN108153838B CN 108153838 B CN108153838 B CN 108153838B CN 201711349470 A CN201711349470 A CN 201711349470A CN 108153838 B CN108153838 B CN 108153838B
Authority
CN
China
Prior art keywords
middleware
hash value
application program
statement
preparation
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.)
Active
Application number
CN201711349470.9A
Other languages
English (en)
Other versions
CN108153838A (zh
Inventor
李云龙
安晓博
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Zhongwei Century Technology Co ltd
Original Assignee
Shandong Zhongwei Century Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shandong Zhongwei Century Technology Co ltd filed Critical Shandong Zhongwei Century Technology Co ltd
Priority to CN201711349470.9A priority Critical patent/CN108153838B/zh
Publication of CN108153838A publication Critical patent/CN108153838A/zh
Application granted granted Critical
Publication of CN108153838B publication Critical patent/CN108153838B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明属于通信领域,特别涉及一种MySQL数据库中间件预处理方法。包括以下步骤:应用程序连接和使用中间件;应用程序发送预备语句获取哈希值;应用程序通过哈希值来设置绑定参数;应用程序通过哈希值来执行语句;应用程序获取查询结果。本发明对于预处理的支持更加全面,本发明完整的在中间件层面实现了全部的预处理功能,对于应用程序来说和直接连接MySQL数据库使用几乎没有任何差别;本方法可以更高效的实现后端MySQL数据库的负载均衡,支持各种负载均衡的策略,提高***查询效率;本方法可以最大程度上实现读写分离,降低主库负载;本方法占用***资源非常小,方便灵活部署在各种类型的服务器上。

Description

一种MySQL数据库中间件预处理方法
(一)技术领域
本发明属于通信领域,特别涉及一种MySQL数据库中间件预处理方法。
(二)背景技术
通常来说,MySQL集群和应用程序之间需要通过一个中间件来实现通信。中间件的作用是,对于应用程序来说,不需要关心数据库是单机数据库还是集群数据库,只通过中间件来访问数据库,无需变动代码,也不受数据库集群架构变动的影响;对于数据库集群来说,可以自由的进行负载均衡的分配,灵活的调整架构设计,集群中某一台数据库宕机也不会影响正常服务。中间件起到的就是一种代理、转发、中继的作用,使得应用程序和数据库集群都可以各自灵活变动而不影响对方。
应用程序访问数据库是通过SQL(结构化查询)语言来进行数据的增、删、改、查等操作。而中间件要想对应用程序透明,就必须妥善处理所有的SQL语言。由于中间件后端的数据库通常都有主库从库之分,主库可读可写,从库一般来说只读(如果在从库上写会造成从库和主库数据不一致)。所以哪些SQL语句在主库上执行,哪些SQL语句在从库上执行,都需要中间件来做出正确的判断,既不能造成主库从库的数据不一致,影响正常业务逻辑,也需要尽量做到负载的均衡,提高服务执行效率。
中间件在执行命令时需要进行预处理,预处理技术是一种常用的数据库查询技术,它先将要查询语句的结构发送到数据库中,数据库分析、编译、优化这条语句,然后在将需要查询的条件参数发送到数据库,由数据库执行并返回结果。由于可以一次解析多次执行,预处理可以提高查询效率;同时,参数设置和SQL语句解析分开,也可以避免SQL注入(一种网络攻击行为)的风险,提高***整体的安全性。
预处理大概分下面几个步骤来进行:
1. 预备语句,分析、优化语句
2. 设置变量,绑定参数
3. 执行完整的语句
4. 删除预备语句。
然而,中间件处理预处理的难点在于,预处理是基于数据库连接而存在的。同一数据库的不同连接,一个连接的预备语句对另一个连接也是不可见的;另外一点就是预处理是分步骤执行的,中间件无法区分哪个步骤应该在哪个连接上执行。结合上面说的,对于读和写的预处理语句也需要分别在主库从库上加以区分。这样就给中间件带来的很大的困难。
通常中间件有以下几种处理方法:
1. 缓存预备语句,待收到变量绑定之后,组成完整的SQL语句发往后端数据库执行。这中做法完全抹杀了预处理的优势,既不能提高效率,又无法防止SQL注入的风险;但是这种方法虽然简单粗暴,但是在负载均衡和数据一致性方面不容易产生问题。
2. 只在主库执行预处理。这样可以保持预处理的优势,但是会增大主库的负担,降低中间件的作用,降低了***的运行效率,也是对从库资源的一种浪费,因为一般来说数据库都是查询多修改少。
3. 将预备语句和绑定参数发往所有的后端服务器执行。这种做法只适用于后端服务器都是主库(都可写入)的情况,不适用于一般的主从架构。
(三)发明内容
本发明为了弥补现有技术的不足,提供了一种MySQL数据库中间件预处理方法。
本发明是通过如下技术方案实现的:
一种MySQL数据库中间件预处理方法,其特征在于:
S1:中间件将应用程序发送的预备语句进行整理修剪后取哈希值,并形成预备语句哈希表,同样的预备语句对应一个哈希值;
S2:中间件将哈希值发送给应用程序,应用程序需将获取到的哈希值和需要绑定的参数同时发送给中间件;
S3:中间件收到应用程序发送的哈希值和绑定参数时,通过哈希值查询到对应的预备语句和操作类型,并替换上一次的绑定参数;
S4:中间件再次将哈希值返回应用程序,应用程序发送收到的哈希值和执行命令;
中间件根据不同负载均衡策略,将最近保留的参数发送的对应的后端MySQL服务器上执行,获取结果,中间件将结果返回给应用程序。
其中,S1中,中间件接受预备语句后,先检查预备语句哈希表中是否具有同样的语句;如果有直接使用,如果没有将预备语句哈希表中***新的预备语句和对应的哈希值。
其中,所述新的预备语句根据操作类型发往所有的后端MySQL数据库进行准备。
其中,所述通过中间件对预备语句的分析,得出语句的操作类型。
其中,S3中,中间件保留上一次应用程序的绑定参数,应用程序在执行同一个参数同一个查询时可在后端进行负载均衡的查询,无需让应用程序再次传递参数。
本发明的有益效果是:
1.对于预处理的支持更加全面,本发明完整的在中间件层面实现了全部的预处理功能,对于应用程序来说和直接连接MySQL数据库使用几乎没有任何差别
2.由于对预处理的全面支持,所以本发明可以通过预处理来提高效率,防止SQL注入,提高安全性
3.本方法可以更高效的实现后端MySQL数据库的负载均衡,支持各种负载均衡的策略,提高***查询效率
4.本方法可以最大程度上实现读写分离,降低主库负载
5.本方法占用***资源非常小,方便灵活部署在各种类型的服务器上
(四)附图说明
下面结合附图对本发明作进一步的说明。
图1为本发明的结构流程图。
(五)具体实施方式
本发明
S1:中间件将应用程序发送的预备语句进行整理修剪后取哈希值,并形成预备语句哈希表,同样的预备语句对应一个哈希值;
S2:中间件将哈希值发送给应用程序,应用程序需将获取到的哈希值和需要绑定的参数同时发送给中间件;
S3:中间件收到应用程序发送的哈希值和绑定参数时,通过哈希值查询到对应的预备语句和操作类型,并替换上一次的绑定参数;
S4:中间件再次将哈希值返回应用程序,应用程序发送收到的哈希值和执行命令;
中间件根据不同负载均衡策略,将最近保留的参数发送的对应的后端MySQL服务器上执行,获取结果,中间件将结果返回给应用程序。
其中,S1中,中间件接受预备语句后,先检查预备语句哈希表中是否具有同样的语句;如果有直接使用,如果没有将预备语句哈希表中***新的预备语句和对应的哈希值。
结合说明书附图具体阐述为:
1、应用程序先将预备语句发往中间件;
2、中间件对预备语句进行整理修剪后取哈希值,此处整理修剪为本领域技术术语,指对语句内的空格、符号等进行删除或整理操作;预备语句与哈希值是一一对应的关系,相同的预备语句只对应一个哈希值;
3、当应用程序发送一条新的预备语句时,如果该预备语句没有对应的哈希值时,中间件将存储新的哈希值和对应的预备语句,然后中间件将新的预备语句根据操作类型发往所有的后端MySQL数据库进行准备;其中中间件通过对预备语句的分析,得出语句的操作类型,比如SELECT是查询类型,INSERT、UPDATE、DELETE、CREATE、DROP、ALTER等是写入类型,区分之后写入操作发往主库,查询操作发往所有从库;此处中间件对预备语句的分析属于现有技术,此处不再赘述;当应用程序发送的预备语句已经存在于中间件中时,中间件直接使用相应的哈希值;
4、中间件将第二步中的哈希值发送给应用程序;
5、在绑定参数时,应用程序需将获取到的哈希值和需要绑定的参数同时发送给中间件,参数为中间件可读取的字符串;
6、中间件在收到应用程序发送的哈希值和绑定参数时,通过哈希值查询到对应的预备语句和操作类型,并替换上一次的绑定参数;
7、中间件再次将哈希值返回给应用程序,表示所有准备工作都已经就绪,可以执行SQL语句了;
8、应用程序发送执行命令,并发送上一步收到的哈希值;
9、中间件根据不同负载均衡策略,将最近保留的参数发送的对应的后端MySQL服务器上执行,获取结果;
10、中间件将结果返回给应用程序。
本发明中:
1.同样的预备语句只会保留一个。对原始的预备语句进行整理修剪之后的字符串取哈希值,由于同样的字符串哈希值是相同的,所以无论应用程序发过来多少预备语句,都会只有一个副本,显著降低了发往后端数据库的预备语句的数量,降低后端数据库负载。
2.通过对预备语句的分析,得出语句的操作类型,比如SELECT是查询类型,INSERT、UPDATE、DELETE、CREATE、DROP、ALTER等是写入类型,区分之后再执行语句的时候,就可以把查询在所有从库上进行负载均衡,把写入操作放到主库上执行,避免了数据不一致。
3.保留上一次应用程序的绑定参数,可以方便应用程序在执行同一个参数同一个查询时也可以在后端进行负载均衡的查询,无需让应用程序再次传递参数。
上面以举例方式对本发明进行了说明,但本发明不限于上述具体实施例,凡基于本发明所做的任何改动或变型均属于本发明要求保护的范围。

Claims (5)

1.一种MySQL数据库中间件预处理方法,其特征在于:S1:中间件将应用程序发送的预备语句进行整理修剪后取哈希值,并形成预备语句哈希表,同样的预备语句对应一个哈希值;S2:中间件将哈希值发送给应用程序,应用程序需将获取到的哈希值和需要绑定的参数同时发送给中间件;S3:中间件收到应用程序发送的哈希值和绑定参数时,通过哈希值查询到对应的预备语句和操作类型,并替换上一次的绑定参数;S4:中间件再次将哈希值返回应用程序,应用程序发送收到的哈希值和执行命令;中间件根据不同负载均衡策略,将最近保留的参数发送的对应的后端MySQL服务器上执行,获取结果;中间件将结果返回给应用程序。
2.根据权利要求1所述的MySQL数据库中间件预处理方法,其特征在于:S1中,中间件接受预备语句后,先检查预备语句哈希表中是否具有同样的语句;如果有直接使用,如果没有将预备语句哈希表中***新的预备语句和对应的哈希值。
3.根据权利要求2所述的MySQL数据库中间件预处理方法,其特征在于:所述新的预备语句根据操作类型发往所有的后端MySQL数据库进行准备。
4.根据权利要求1所述的MySQL数据库中间件预处理方法,其特征在于:所述中间件通过对预备语句的分析,得出语句的操作类型。
5.根据权利要求1所述的MySQL数据库中间件预处理方法,其特征在于:S3中,中间件保留上一次应用程序的绑定参数,应用程序在执行同一个参数同一个查询时可在后端进行负载均衡的查询,无需让应用程序再次传递参数。
CN201711349470.9A 2017-12-15 2017-12-15 一种MySQL数据库中间件预处理方法 Active CN108153838B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711349470.9A CN108153838B (zh) 2017-12-15 2017-12-15 一种MySQL数据库中间件预处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711349470.9A CN108153838B (zh) 2017-12-15 2017-12-15 一种MySQL数据库中间件预处理方法

Publications (2)

Publication Number Publication Date
CN108153838A CN108153838A (zh) 2018-06-12
CN108153838B true CN108153838B (zh) 2022-03-11

Family

ID=62467217

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711349470.9A Active CN108153838B (zh) 2017-12-15 2017-12-15 一种MySQL数据库中间件预处理方法

Country Status (1)

Country Link
CN (1) CN108153838B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101183377A (zh) * 2007-12-10 2008-05-21 华中科技大学 一种基于消息中间件的高可用性数据库集群
CN102662946A (zh) * 2012-02-20 2012-09-12 北京地拓科技发展有限公司 一种自动监测数据库中记录变化的方法和***
CN105426396A (zh) * 2015-10-28 2016-03-23 深圳市万姓宗祠网络科技股份有限公司 一种基于路由算法的数据库分片方法、***和中间件***
CN106599178A (zh) * 2016-12-12 2017-04-26 国云科技股份有限公司 一种可实现快速寻找并支持分布存储的大数据处理方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8145596B2 (en) * 2005-09-15 2012-03-27 International Business Machines Corporation Value assessment of a computer program to a company

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101183377A (zh) * 2007-12-10 2008-05-21 华中科技大学 一种基于消息中间件的高可用性数据库集群
CN102662946A (zh) * 2012-02-20 2012-09-12 北京地拓科技发展有限公司 一种自动监测数据库中记录变化的方法和***
CN105426396A (zh) * 2015-10-28 2016-03-23 深圳市万姓宗祠网络科技股份有限公司 一种基于路由算法的数据库分片方法、***和中间件***
CN106599178A (zh) * 2016-12-12 2017-04-26 国云科技股份有限公司 一种可实现快速寻找并支持分布存储的大数据处理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
数据库集群中间件MySQL Proxy研究与分析;杨芳萍;《万方数据》;20131204;第2013卷(第19期);第86-89页 *

Also Published As

Publication number Publication date
CN108153838A (zh) 2018-06-12

Similar Documents

Publication Publication Date Title
CN107092656B (zh) 一种树状结构数据处理方法及***
WO2020233367A1 (zh) 区块链数据存储和查询方法、装置、设备及存储介质
CN110489445B (zh) 一种基于多形态复合的海量数据快速查询方法
US11494688B2 (en) Learning ETL rules by example
CN107016071B (zh) 一种利用简单路径特征优化树状结构数据的方法及***
CN109977110A (zh) 数据清洗方法、装置及设备
CN110688397B (zh) 一种基于sql的分布式数据统一访问***及方法
US20050071359A1 (en) Method for automated database schema evolution
US8661022B2 (en) Database management method and system
CN109508355A (zh) 一种数据抽取方法、***及终端设备
CN112235311B (zh) Ovsdb客户端代码自动生成方法、***、设备及介质
CN112328489B (zh) 测试用例生成方法、装置、终端设备和存储介质
CN111782265A (zh) 基于字段级血缘关系的软件资源***及其建立方法
CN109388523A (zh) 一种基于二进制日志文件恢复MySQL数据库的方法
CN111159020B (zh) 一种应用于同步软件测试的方法和装置
CN106708972B (zh) 一种基于hana数据库利用slt组件对abap程序优化的方法
CN109634585B (zh) 一种基于表单自适应展示和更新服务端数据的方法
CN105335482A (zh) 面向海量分布式数据库的批量***方法
CN111177181A (zh) Sql文本审核方法、***、存储介质及装置
CN116431598A (zh) 一种基于Redis的关系型数据库全量内存化的方法
CN110019306A (zh) 一种基于xml格式文件的sql语句查找方法及***
CN108153838B (zh) 一种MySQL数据库中间件预处理方法
CN113282579A (zh) 一种异构数据存储与检索方法、装置、设备及存储介质
CN116955393A (zh) 一种数据处理方法、装置、电子设备及存储介质
WO2008085359A1 (en) Accelerating queries using delayed value projection of enumerated storage

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
CB02 Change of applicant information

Address after: Room 1201, building 3, Aosheng building, 1166 Xinluo street, hi tech Zone, Jinan City, Shandong Province

Applicant after: Shandong Zhongwei Century Technology Co.,Ltd.

Address before: 250101 12th floor, building 3, Aosheng building, 1166 Xinluo street, high tech Zone, Jinan City, Shandong Province

Applicant before: JOVISION TECHNOLOGY Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: A Preprocessing Method for MySQL Database Middleware

Effective date of registration: 20221121

Granted publication date: 20220311

Pledgee: Ji'nan rural commercial bank Limited by Share Ltd. high tech branch

Pledgor: Shandong Zhongwei Century Technology Co.,Ltd.

Registration number: Y2022980022679

PE01 Entry into force of the registration of the contract for pledge of patent right