一种基于共享内存的本地数据库查询方法技术

技术编号:35262839 阅读:16 留言:0更新日期:2022-10-19 10:23
本发明专利技术公开了一种基于共享内存的本地数据库查询方法,属于数据库技术领域,本发明专利技术要解决的技术问题为如何去除共享内存的痛点,减少内存中数据访问次数和数据复制次数,提升查询效率,采用的技术方案为:该方法是基于共享内存的进程间通信机制,将在本地数据库进程中创建的查询迭代器对象共享到客户端进程中使用,进而实现客户端向数据库进行数据查询。进而实现客户端向数据库进行数据查询。进而实现客户端向数据库进行数据查询。

【技术实现步骤摘要】
一种基于共享内存的本地数据库查询方法


[0001]本专利技术涉及数据库
,具体地说是一种基于共享内存的本地数据库查询方法。

技术介绍

[0002]数据库系统作为一个独立的进程运行,客户端是另一个进程。对于客户端和数据库系统运行在同一个服务器的场景时,它们间的通信就是进程间通信。客户端访问数据库一般都是采用基于Socket通信机制。
[0003]进程间通信就是在不同进程之间传播或交换信息。进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。另外,系统空间是“公共场所”,各进程均可以访问,所以内核也可以提供这样的条件。常用的进程间通信(IPC)的方法有:信号、管道、socket、信号量、共享内存、消息队列。
[0004]共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。
[0005]共享内存通信的不足具体如下:
[0006]①
进程间预先定义好共享内存中的数据格式;
[0007]②
数据解析的过程繁琐,可能需要重新创建数据索引;
[0008]③
共享内存的区域必须是连续的。
[0009]故如何去除共享内存的痛点,减少内存中数据访问次数和数据复制次数,提升查询效率是目前亟待解决的技术问题。

技术实现思路

[0010]本专利技术的技术任务是提供一种基于共享内存的本地数据库查询方法,来解决如何如何去除共享内存的痛点,减少内存中数据访问次数和数据复制次数,提升查询效率的问题。
[0011]本专利技术的技术任务是按以下方式实现的,一种基于共享内存的本地数据库查询方法,该方法是基于共享内存的进程间通信机制,将在本地数据库进程中创建的查询迭代器对象共享到客户端进程中使用,进而实现客户端向数据库进行数据查询;具体如下:
[0012]S1、客户端查询任一时间段内的数据时,调用数据库SDK的查询API接口;
[0013]S2、客户端中的数据库SDK通过gRPC机制调用到数据库进程的查询函数;
[0014]S3、数据库进程向共享内存管理模块申请迭代器对象所需要的空间,并在申请的共享内存空间上创建共享内存迭代器;
[0015]S4、根据查询的时间范围,寻找相应的内存块对象,将内存块对象的引用技术加一;
[0016]S5、将内存块对象指针存储于迭代器的ref数组中,并通过定位算法找到查询的第
一条数据的位置;
[0017]S6、将迭代器的指针通过gRPC机制返回给客户端的数据库SDK;
[0018]S7、客户端的数据库SDK接收到指针地址后,通过强转指令,将指针指向的空间转换成客户端进程中的迭代器对象;
[0019]S8、客户端使用迭代器对象,访问数据库SDK中的数据;并调用value函数获取当前记录的数值,再调用next函数定位下一条记录的位置,同时通过valid函数判断是否查询结束;
[0020]S9、客户端查询完毕后,调用结束接口,客户端的数据库SDK通过gRPC机制调用数据库进程的结束查询的函数;
[0021]S10、数据库进程将迭代器的ref数组中的对象引用计数都减一,再删除迭代器对象;
[0022]S11、返回成功。
[0023]作为优选,客户端向数据库进行数据查询前,执行如下内容:
[0024]创建进程间共享内存:通过分配一个很大的共享内存空间,将多个进程中共享内存设置成相同的起始地址,使得共享内存中的指针在进程间能够直接使用,为进程间共享对象创造基础;
[0025]数据库进程管理共享内存:数据库进程用于管理维护整个共享内存中的数据,客户端进程用于读取内存数据;数据库进程中设置共享内存管理模块,共享内存管理模块用于提供申请空间和释放空间的函数。
[0026]作为优选,创建进程间共享内存具体如下:
[0027]在数据库进程和客户端进程启动时,创建加载共享内存,并且设置相同的共享内存的起始地址;
[0028]将客户端进程的共享内存映射区的起始地址与数据库进程的共享内存映射区的起始地址配置成相同的起始地址;
[0029]设置完成后,在共享内存中创建指向共享内存中存储的任一变量的指针,该指针在不同进程中都能够正确解析并能读取出指针指向的变量。
[0030]更优地,所述共享内存管理模块还用于管理共享内存分配出的一个整块连续空间,并提供共享内存连续区域中申请和释放任意内存大小空间的接口。
[0031]更优地,所述共享内存管理模块的内存管理方式采用简便且性能最高的定长内存管理。
[0032]更优地,所述共享内存管理模块还具有如下功能:
[0033]①
、共享内存管理模块初始化:共享内存管理模块将整个共享内存空间按照8K大小划分成固定大小的内存块,将内存块首地址放入可使用队列中;
[0034]②
、向共享内存管理模块申请空间:共享内存管理模块提供内存申请分配接口Allocate8K,调用接口Allocate8K,共享内存管理模块取出可使用队列头部内存块的首地址,返出去;
[0035]③
、释放共享内存管理模块申请的空间:共享内存管理模块提供内存释放接口Release,共享内存管理模块将传入的内存块首地址放入可使用队列末尾。
[0036]更优地,所述共享内存空间用于共享数据和共享对象;
[0037]数据库进程将查询需要的数据以及对象存储在共享内存空间中,共享内存空间按照正常内存的使用方式创建相互关联的类对象以及存储数据的数组空间。
[0038]更优地,所述迭代器内部包括与查询时间范围重叠的所有内存块对象(ZMetricVector对象)列表以及迭代器当前位置指针。
[0039]一种电子设备,包括:存储器和至少一个处理器;
[0040]其中,所述存储器上存储有计算机程序;
[0041]所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的基于共享内存的本地数据库查询方法。
[0042]一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如上述的基于共享内存的本地数据库查询方法。
[0043]本专利技术的基于共享内存的本地数据库查询方法具有以下优点:
[0044](一)本专利技术针对本地数据库查询时数据需要在内存中多次复制导致查询性能低的问题,使用基于共享内存技术,数据库中存储的数据完全不用复制,极大提升的性能,具有如下优点:
[0045]①
待查询的数据不必复制;
[0046]②
使用共享对象技术,屏蔽了内存数据格式,简化了研发工作;
[0047]③
使用迭代器机制,客户端按需逐条获取数据,不占用内存空间;
[0048](二)本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于共享内存的本地数据库查询方法,其特征在于,该方法是基于共享内存的进程间通信机制,将在本地数据库进程中创建的查询迭代器对象共享到客户端进程中使用,进而实现客户端向数据库进行数据查询;具体如下:S1、客户端查询任一时间段内的数据时,调用数据库SDK的查询API接口;S2、客户端中的数据库SDK通过gRPC机制调用到数据库进程的查询函数;S3、数据库进程向共享内存管理模块申请迭代器对象所需要的空间,并在申请的共享内存空间上创建共享内存迭代器;S4、根据查询的时间范围,寻找相应的内存块对象,将内存块对象的引用技术加一;S5、将内存块对象指针存储于迭代器的ref数组中,并通过定位算法找到查询的第一条数据的位置;S6、将迭代器的指针通过gRPC机制返回给客户端的数据库SDK;S7、客户端的数据库SDK接收到指针地址后,通过强转指令,将指针指向的空间转换成客户端进程中的迭代器对象;S8、客户端使用迭代器对象,访问数据库SDK中的数据;并调用value函数获取当前记录的数值,再调用next函数定位下一条记录的位置,同时通过valid函数判断是否查询结束;S9、客户端查询完毕后,调用结束接口,客户端的数据库SDK通过gRPC机制调用数据库进程的结束查询的函数;S10、数据库进程将迭代器的ref数组中的对象引用计数都减一,再删除迭代器对象;S11、返回成功。2.根据权利要求1所述的基于共享内存的本地数据库查询方法,其特征在于,客户端向数据库进行数据查询前,执行如下内容:创建进程间共享内存:通过分配共享内存空间,将多个进程中共享内存设置成相同的起始地址,使得共享内存中的指针在进程间能够直接使用,为进程间共享对象创造基础;数据库进程管理共享内存:数据库进程用于管理维护整个共享内存中的数据,客户端进程用于读取内存数据;数据库进程中设置共享内存管理模块,共享内存管理模块用于提供申请空间和释放空间的函数。3.根据权利要求2所述的基于共享内存的本地数据库查询方法,其特征在于,创建进程间共享内存具体如下:在数据库进程和客户端进程启动时,创建加载共享内存,并且设置相同的共享内存的起始地址;将客户端进程的共享内存映射区的起始地址与数据库进程的共享内存映射区的起始地址配置成相同的起始地址;设置完成...

【专利技术属性】
技术研发人员:梁波贾德星王永炎
申请(专利权)人:浪潮软件集团有限公司
类型:发明
国别省市:

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

1