CN113296822B - 一种基于动态库的数据库系统在线升级方法和系统 - Google Patents
一种基于动态库的数据库系统在线升级方法和系统 Download PDFInfo
- Publication number
- CN113296822B CN113296822B CN202110585971.7A CN202110585971A CN113296822B CN 113296822 B CN113296822 B CN 113296822B CN 202110585971 A CN202110585971 A CN 202110585971A CN 113296822 B CN113296822 B CN 113296822B
- Authority
- CN
- China
- Prior art keywords
- dynamic library
- database
- module
- database system
- service
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000004806 packaging method and process Methods 0.000 claims abstract description 14
- 230000006870 function Effects 0.000 claims description 54
- 238000012544 monitoring process Methods 0.000 claims description 30
- 230000008569 process Effects 0.000 claims description 29
- 238000001514 detection method Methods 0.000 claims description 16
- 230000009286 beneficial effect Effects 0.000 abstract description 4
- 230000000694 effects Effects 0.000 abstract description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000007792 addition Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- 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/21—Design, administration or maintenance of databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于动态库的数据库系统在线升级方法和系统,属于数据库技术领域,所述方法包括:将数据库系统的升级内容封装为动态库;加载所述动态库到内存中;将所述数据库系统的待升级内容替换为所述动态库。通过将升级内容封装为动态库,并加载到内存中,替换动态库的调用关系,使数据库系统调用新版本的动态库,从而实现升级的作用,避免了繁琐的升级步骤,避免了数据库服务中断,实现无感或低感升级,利于提高用户体验。
Description
技术领域
本发明涉及数据库技术领域,具体涉及一种基于动态库的数据库系统在线升级方法和系统。
背景技术
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合,已广泛应用到各个技术领域,例如平台即服务(PaaS)。PaaS服务系统需要7X24小时不间断运行,服务不能中断,更不允许重启。但是,当数据库系统发现重大漏洞,或者增强功能时,又不得不停止PaaS服务进程,进行离线升级。
随着主备复制技术的增强,很多数据库系统会采用一主多备的模式,这样可以先停止备库,升级备库,然后再将服务从主库切换到备库,接下来再升级主库。通过主备库交替对外提供服务,间接实现了在线升级,但是交替服务易导致当前连接全部断开,当前事务全部失败回滚,并且要求应用系统支持事先制定的高可用机制,才能保证正常切换,操作步骤繁琐,用户感知同样不好,导致数据库升级困难。
发明内容
针对现有技术中存在的上述技术问题,本发明提供一种基于动态库的数据库系统在线升级方法和系统,通过将升级内容封装到动态库中,加载动态库后再进行替换,便于无感升级。
本发明公开了一种基于动态库的数据库系统在线升级方法,所述方法包括:将数据库系统的升级内容封装为动态库;加载所述动态库到内存中;将所述数据库系统的待升级内容替换为所述动态库。
优选的,所述升级内容包括可执行代码,所述可执行代码的在线升级方法包括:
将可执行代码封装为动态库;
将所述动态库加载到进程空间;
将所述数据库系统的指针或函数指针指向所述可执行代码。
优选的,所述可执行代码包括以下任一函数或它们的组合:定时检测函数、连接创建函数和数据库操作函数;
其中,定时检测函数用于定时监听系统的服务,所述连接创建函数用于创建和释放连接的执行进程,执行进程用于调用所述数据库操作函数,所述数据库操作函数用于接收并执行数据库的操作指令。
优选的,所述方法还包括结束动态库的方法:
监听当前动态库提供服务的调用情况;
判断所述服务是否停止调用;
若是,结束所述服务、并释放当前动态库的进程空间。
优选的,数据库操作的方法包括:
判断动态库提供的服务是否结束;
若否,将新连接请求转发给连接创建函数;
通过连接创建函数创建新连接的执行线程;
通过所述执行线程接收新连接请求的数据库操作请求、执行相应的数据库操作,并返回操作结果。
优选的,所述方法还包括通过监听动态库升级数据库系统的方法:
监听动态库;
判断所述动态库是否有新版本;
若是,将所述数据库系统的指针或指针函数指向所述新版本动态库的可执行代码。
优选的,监听指定目录下的动态库。
本发明还提供一种用于实现上述数据库系统在线升级方法的系统,包括封装模块、主控模块和动态库,
所述封装模块用于将数据库系统的升级内容封装为动态库;
所述主控模块用于加载所述动态库,并将所述数据库系统的待升级内容替换为所述动态库。
优选的,所述动态库包括检测模块、连接创建模块和数据库操作模块,
所述检测模块用于监听当前动态库提供服务的调用情况;判断所述服务是否停止调用;若是,结束所述服务、并释放当前动态库的进程空间;
所述连接创建模块用于根据连接请求创建新连接的执行进程,执行进程通过数据库操作模块接收数据库操作请求、执行相应的数据库操作,并返回操作结果。
优选的,所述主控模块包括动态库监听子模块、内存管理子模块、服务监听子模块和连接管理子模块;
所述动态库监听子模块用于监听指定目录下的新版本动态库;
所述内存管理子模块用于将所述新版本动态库加载到进程空间中;
所述服务监听子模块用于监听动态库提供的服务;
所述连接管理子模块用于根据所述服务的状态,将监听到的连接请求转发给连接创建模块。
与现有技术相比,本发明的有益效果为:通过将升级内容封装为动态库,并加载到内存中,替换动态库的调用关系,使数据库系统调用新版本的动态库,从而实现升级的作用,避免了繁琐的升级步骤,避免了数据库服务中断,实现无感或低感升级,利于提高用户体验。
附图说明
图1是本发明的基于动态库的数据库在线升级方法流程图;
图2是具体实施例的流程图;
图3是本发明的系统逻辑框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合附图对本发明做进一步的详细描述:
一种基于动态库的数据库系统在线升级方法,如图1所示,所述方法包括:
步骤101:将数据库系统的升级内容封装为动态库。
步骤102:加载所述动态库到内存中。动态库在Linux上称为共享对象库,在Windows上称为动态链接库,可以被其它应用程序调用,有助于共享数据和资源,同时多个应用程序可以同时访问动态库的内容。
步骤103:将所述数据库系统的待升级内容替换为所述动态库。即将动态库的升级内容替换待升级内容,其中待升级内容为需要升级的内容。
通过将升级内容封装为动态库,并加载到内存中,替换动态库的调用关系,使数据库系统调用新版本的动态库,从而实现升级的作用,避免了繁琐的升级步骤,避免了数据库服务中断,实现无感或低感升级,利于提高用户体验。
如图2所示,在一个具体实施例中,所述升级内容包括可执行代码,即动态库通过可执行代码提供服务,所述可执行代码的在线升级方法包括:
步骤201:将可执行代码封装为动态库。
步骤202:将所述动态库加载到进程空间。进程空间是指在内存中或虚拟内存中的进程地址空间。将动态库加载到进程空间中,利于提高读写速度,提高服务的执行效率。
步骤203:将所述数据库系统的指针或函数指针指向所述可执行代码。
例如,可执行代码包括以下任一函数或它们的组合:定时检测函数、连接创建函数和数据库操作函数;其中,定时检测函数用于定时监听系统的服务,所述连接创建函数用于创建和释放连接的执行进程,执行进程用于调用所述数据库操作函数,所述数据库操作函数用于接收并执行数据库的操作指令。可以将定时检测函数的函数指针赋值给F_CronJob、连接创建函数的函数指针赋值给F_Client、数据库操作函数的函数指针赋值给F_SQLProc,通过调用相应的函数指针调用动态库的函数。
其中,所述方法还包括结束动态库的方法:
步骤110:监听当前动态库提供服务的调用情况。可以通过定时检测函数检测运行状态。
步骤111:判断所述服务是否停止调用;
若是,执行步骤112:结束所述服务、并释放当前动态库的进程空间。
若否,执行步骤113:定时监听所述服务的调用情况。
通过动态库中的检测函数检测当前动态库的调用情况,当动态库停止调用时,判断为已替换到其他版本的动态库,或已不需要当前动态库提供的服务,通过主动结束服务、并释放进程空间,节约计算资源或内存资源,防止升级后,不同版本的动态库占用大量的计算资源或内存资源。
应当指出的是,动态库提供的服务意外停止或服务重启时,可以加载最近版本的动态库,并将数据库系统的指针函数指向所加载动态库的函数。
其中,数据库操作的方法包括:
步骤121:判断动态库提供的服务是否结束。在一个具体实施例中,可以通过函数指针的值判断服务是否结束,在一段时间内,函数指针指向非当前动态库时,判断为服务已结束。
若否,执行步骤122:将新连接请求转发给连接创建函数。可以通过指针函数进行调用。
步骤123:通过连接创建函数创建新连接的执行线程。
步骤124:通过所述执行线程接收新连接请求的数据库操作请求、执行相应的数据库操作,并返回操作结果。执行线程可以通过调用数据库操作函数进行数据库操作,数据库操作请求可以包括对数据库的增、删、改、查。
本发明的方法还包括通过监听动态库升级数据库的方法:
步骤131:监听动态库。
步骤132:判断所述动态库是否有新版本。
若是,步骤133:加载新版本的动态库,将所述数据库系统的指针或指针函数指向新版本动态库的可执行代码。
通常监听指定目录下的动态库,升级时,将动态库保存到该目录下,可以实现自动升级。
如图3所示,本发明还提供一种用于实现上述数据库系统在线升级方法的系统,包括封装模块1、主控模块2和动态库3,
封装模块1用于将数据库系统的升级内容封装为动态库3;
主控模块2用于加载动态库3,并将所述数据库系统的待升级内容替换为动态库3。
其中,动态库3可以包括检测模块31、连接创建模块32和数据库操作模块33,
检测模块31用于监听当前动态库提供服务的调用情况;判断所述服务是否停止调用;若是,结束所述服务、并释放当前动态库的进程空间;
连接创建模块32用于根据连接请求创建新连接的执行进程,执行进程通过数据库操作模块33接收新连接请求的数据库操作请求、执行相应的数据库操作,并返回操作结果。
其中,所述主控模块包括动态库监听子模块21、内存管理子模块22、服务监听子模块23和连接管理子模块24;
动态库监听子模块21用于监听指定目录下的新版本动态库;
内存管理子模块22用于将所述新版本动态库加载到进程空间中;
服务监听子模块23用于监听动态库提供的服务;
连接管理子模块24用于根据所述服务的状态,将监听到的连接请求转发给连接创建模块32。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于动态库的数据库系统在线升级方法,其特征在于,所述方法包括:
将数据库系统的升级内容封装为动态库;
加载所述动态库到内存中;
将所述数据库系统的待升级内容替换为所述动态库;
其中,所述升级内容包括可执行代码,所述可执行代码包括:定时检测函数,结束动态库的方法:
通过定时检测函数监听当前动态库提供服务的调用情况;
判断所述服务是否停止调用;
若是,结束所述服务、并释放当前动态库的进程空间。
2.根据权利要求1所述的数据库系统在线升级方法,其特征在于,所述可执行代码的在线升级方法包括:
将可执行代码封装为动态库;
将所述动态库加载到进程空间;
将所述数据库系统的指针或函数指针指向所述可执行代码。
3.根据权利要求2所述的数据库系统在线升级方法,其特征在于,所述可执行代码还包括以下任一函数或它们的组合:连接创建函数和数据库操作函数;
其中,定时检测函数用于定时监听系统的服务,所述连接创建函数用于创建和释放连接的执行进程,执行进程用于调用所述数据库操作函数,所述数据库操作函数用于接收并执行数据库的操作指令。
4.根据权利要求3所述的数据库系统在线升级方法,其特征在于,动态库提供的服务意外停止或服务重启时,加载最近版本的动态库,并将数据库系统的指针函数指向所加载动态库。
5.根据权利要求3所述的数据库系统在线升级方法,其特征在于,数据库操作的方法包括:
判断动态库提供的服务是否结束;
若否,将新连接请求转发给连接创建函数;
通过连接创建函数创建新连接的执行线程;
通过所述执行线程接收新连接请求的数据库操作请求、执行相应的数据库操作,并返回操作结果。
6.根据权利要求2所述的数据库系统在线升级方法,其特征在于,还包括通过监听动态库升级数据库系统的方法:
监听动态库;
判断所述动态库是否有新版本;
若是,将所述数据库系统的指针或指针函数指向所述新版本动态库的可执行代码。
7.根据权利要求6所述的数据库系统在线升级方法,其特征在于,监听指定目录下的动态库。
8.一种用于实现如权利要求1-7任一项所述数据库系统在线升级方法的系统,其特征在于,包括封装模块、主控模块和动态库,
所述封装模块用于将数据库系统的升级内容封装为动态库;
所述主控模块用于加载所述动态库,并将所述数据库系统的待升级内容替换为所述动态库。
9.根据权利要求8所述的系统,其特征在于,所述动态库包括检测模块、连接创建模块和数据库操作模块,
所述检测模块用于监听当前动态库提供服务的调用情况;判断所述服务是否停止调用;若是,结束所述服务、并释放当前动态库的进程空间;
所述连接创建模块用于根据连接请求创建新连接的执行进程,执行进程通过数据库操作模块接收数据库操作请求、执行相应的数据库操作,并返回操作结果。
10.根据权利要求9所述的系统,其特征在于,所述主控模块包括动态库监听子模块、内存管理子模块、服务监听子模块和连接管理子模块;
所述动态库监听子模块用于监听指定目录下的新版本动态库;
所述内存管理子模块用于将所述新版本动态库加载到进程空间中;
所述服务监听子模块用于监听动态库提供的服务;
所述连接管理子模块用于根据所述服务的状态,将监听到的连接请求转发给连接创建模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110585971.7A CN113296822B (zh) | 2021-05-27 | 2021-05-27 | 一种基于动态库的数据库系统在线升级方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110585971.7A CN113296822B (zh) | 2021-05-27 | 2021-05-27 | 一种基于动态库的数据库系统在线升级方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113296822A CN113296822A (zh) | 2021-08-24 |
CN113296822B true CN113296822B (zh) | 2023-11-03 |
Family
ID=77325627
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110585971.7A Active CN113296822B (zh) | 2021-05-27 | 2021-05-27 | 一种基于动态库的数据库系统在线升级方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113296822B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114693275A (zh) * | 2022-04-18 | 2022-07-01 | 浪潮通用软件有限公司 | 一种业务系统函数动态执行方法 |
CN116661905B (zh) * | 2023-07-27 | 2023-10-20 | 北京瑞华赢科技发展股份有限公司 | 一种基于动态库加载实现设备自动适配方法以及系统 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1448867A (zh) * | 2002-03-30 | 2003-10-15 | 深圳市中兴通讯股份有限公司 | 一种统一访问数据库系统的方法 |
CN1979418A (zh) * | 2005-12-07 | 2007-06-13 | 英业达股份有限公司 | 动态升级程序的方法 |
CN101582071A (zh) * | 2008-05-16 | 2009-11-18 | 鸿富锦精密工业(深圳)有限公司 | 数据更新系统及方法 |
CN108762825A (zh) * | 2018-04-20 | 2018-11-06 | 烽火通信科技股份有限公司 | 动态库重载的实现方法及系统 |
CN109597631A (zh) * | 2017-09-28 | 2019-04-09 | 阿里巴巴集团控股有限公司 | 一种进程的升级方法、装置及电子设备 |
CN110286930A (zh) * | 2019-06-27 | 2019-09-27 | 腾讯科技(深圳)有限公司 | 一种云平台升级方法、装置、终端及存储介质 |
CN110618996A (zh) * | 2019-08-07 | 2019-12-27 | 北京东方国信科技股份有限公司 | 一种应用于分布式数据库的函数库热更新方法 |
CN111459489A (zh) * | 2020-02-27 | 2020-07-28 | 湖南大学 | 一种动态库自动服务化封装方法、系统及应用 |
CN111666093A (zh) * | 2020-06-29 | 2020-09-15 | 新华三信息安全技术有限公司 | 一种软件模块升级方法及装置 |
CN111736883A (zh) * | 2020-05-11 | 2020-10-02 | 山东浪潮通软信息科技有限公司 | 基于数据延迟升级的计算机管理系统热升级方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6418555B2 (en) * | 1998-07-21 | 2002-07-09 | Intel Corporation | Automatic upgrade of software |
US20070277167A1 (en) * | 2006-05-23 | 2007-11-29 | International Business Machines Corporation | System and method for computer system maintenance |
CN103744709B (zh) * | 2014-01-23 | 2017-02-15 | 华为技术有限公司 | 补丁加载方法及装置 |
-
2021
- 2021-05-27 CN CN202110585971.7A patent/CN113296822B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1448867A (zh) * | 2002-03-30 | 2003-10-15 | 深圳市中兴通讯股份有限公司 | 一种统一访问数据库系统的方法 |
CN1979418A (zh) * | 2005-12-07 | 2007-06-13 | 英业达股份有限公司 | 动态升级程序的方法 |
CN101582071A (zh) * | 2008-05-16 | 2009-11-18 | 鸿富锦精密工业(深圳)有限公司 | 数据更新系统及方法 |
CN109597631A (zh) * | 2017-09-28 | 2019-04-09 | 阿里巴巴集团控股有限公司 | 一种进程的升级方法、装置及电子设备 |
CN108762825A (zh) * | 2018-04-20 | 2018-11-06 | 烽火通信科技股份有限公司 | 动态库重载的实现方法及系统 |
CN110286930A (zh) * | 2019-06-27 | 2019-09-27 | 腾讯科技(深圳)有限公司 | 一种云平台升级方法、装置、终端及存储介质 |
CN110618996A (zh) * | 2019-08-07 | 2019-12-27 | 北京东方国信科技股份有限公司 | 一种应用于分布式数据库的函数库热更新方法 |
CN111459489A (zh) * | 2020-02-27 | 2020-07-28 | 湖南大学 | 一种动态库自动服务化封装方法、系统及应用 |
CN111736883A (zh) * | 2020-05-11 | 2020-10-02 | 山东浪潮通软信息科技有限公司 | 基于数据延迟升级的计算机管理系统热升级方法及装置 |
CN111666093A (zh) * | 2020-06-29 | 2020-09-15 | 新华三信息安全技术有限公司 | 一种软件模块升级方法及装置 |
Non-Patent Citations (2)
Title |
---|
可复用可动态加载式数据库中间件的设计;郭秀岩;《微计算机应用》;第29卷(第9期);1-5 * |
基于Delphi的DLL封装系统数据支撑模块技术的研究;王春红 等;《现代计算机》;51-80 * |
Also Published As
Publication number | Publication date |
---|---|
CN113296822A (zh) | 2021-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6681389B1 (en) | Method for providing scaleable restart and backout of software upgrades for clustered computing | |
US20060218545A1 (en) | Server system and online software update method | |
US9047162B2 (en) | Dynamic software version selection | |
CN113296822B (zh) | 一种基于动态库的数据库系统在线升级方法和系统 | |
CA2347404C (en) | System and method for recovering applications | |
US7603256B2 (en) | Enabling high availability and load balancing for management modules in a computing environment | |
CN104915263A (zh) | 基于容器技术的进程故障处理方法及装置 | |
CN111124475A (zh) | 存储管理的方法、电子设备和计算机可读存储介质 | |
CN111538585B (zh) | 一种基于node.js的服务器进程调度方法、系统和装置 | |
CN109597631B (zh) | 一种进程的升级方法、装置及电子设备 | |
CN111209110A (zh) | 一种实现负载均衡的任务调度管理方法、系统和存储介质 | |
JPH10301760A (ja) | ソフトウェア自動配布管理システム及び方法 | |
CN107239313A (zh) | Spring应用服务的升级方法和存储介质 | |
CN112434008A (zh) | 分布式数据库升级方法、设备及介质 | |
US6336215B1 (en) | Apparatus and method for on-line code only replacement of a running program using checkpoints | |
CN112667711B (zh) | 一种MySQL只读实例管理方法、系统及计算机可读介质 | |
EP1145136B1 (en) | Method and apparatus for dynamic command extensibility in an intelligent agent | |
CN112565416A (zh) | 基于云原生的大规模边缘安卓设备纳管系统及其纳管方法 | |
CN107085514B (zh) | 共享库升级方法及装置 | |
CN111736883A (zh) | 基于数据延迟升级的计算机管理系统热升级方法及装置 | |
CN113448609B (zh) | 一种容器的升级方法、装置、设备和存储介质 | |
CN113342376B (zh) | 一种针对物联网设备的操作系统进行升级的方法及装置 | |
CN112486517B (zh) | 应用程序的安装方法、系统、电子设备及存储介质 | |
CN112579113A (zh) | 应用程序的升级方法、装置、存储介质及终端 | |
CN116661905B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |