[发明专利]一种LMDB扩展方法及装置有效
| 申请号: | 201811142236.3 | 申请日: | 2018-09-28 |
| 公开(公告)号: | CN109408202B | 公开(公告)日: | 2020-11-06 |
| 发明(设计)人: | 王洋 | 申请(专利权)人: | 新华三技术有限公司 |
| 主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F9/50 |
| 代理公司: | 北京博思佳知识产权代理有限公司 11415 | 代理人: | 林祥 |
| 地址: | 310052 浙*** | 国省代码: | 浙江;33 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 lmdb 扩展 方法 装置 | ||
本发明提供一种LMDB扩展方法及装置,所述方法包括:当确定目标数据库文件的指针指向的目标进程的第一虚拟内存空间满足扩展条件时,为所述目标数据库文件在所述目标进程中映射第二虚拟内存空间;其中,所述第二虚拟内存空间的长度大于所述第一虚拟内存空间的长度;将所述目标数据库文件的指针指向所述第二虚拟内存空间。应用本发明实施例可以提高数据库文件的访问效率。
技术领域
本发明涉及网络通信技术领域,尤其涉及一种LMDB扩展方法及装置。
背景技术
LMDB(Lightning Memory-Mapped Database,闪电内存映射数据库)是一种基于MMAP(一种内存映射文件的方法)的数据库。MMAP可以将数据库文件的内容映射到进程内部(虚拟内存空间),多个进程可以同时映射一个数据库文件,LMDB正是基于此,实现数据在不同进程间的共享。
当一个数据库文件在一个进程中映射的虚拟内存空间的剩余空间为零时,该进程需要等待所有访问该虚拟内存空间的事务结束,再调用LMDB的接口,将原有的内存映射取消,即释放原有的虚拟内存空间(剩余空间为零的虚拟内存空间),并重新在该进程中为该数据库文件映射一个更长的虚拟内存空间。
然而,释放原有的虚拟内存空间,需要等待所有正在访问该虚拟内存空间的读者/写者均结束时才能释放,而正在访问该虚拟内存空间的读者/写者结束的时间不确定,等待所有正在访问该虚拟内存空间的读者/写者可能要等很长时间,导致其他需要通过该进程访问该数据库文件的读者/写者阻塞。
发明内容
本发明提供一种LMDB扩展方法及装置,以解决现有LMDB实现方案中LMDB扩展效率低的问题。
根据本发明的第一方面,提供一种LMDB扩展方法,包括:
当确定目标数据库文件的指针指向的目标进程的第一虚拟内存空间满足扩展条件时,为所述目标数据库文件在所述目标进程中映射第二虚拟内存空间;其中,所述第二虚拟内存空间的长度大于所述第一虚拟内存空间的长度;
将所述目标数据库文件的指针指向所述第二虚拟内存空间。
结合第一方面,在第一种可能的实现方式中,所述为所述目标数据库文件在所述目标进程中映射第二虚拟内存空间之前,还包括:
当所述第一虚拟内存空间的剩余空间小于预设阈值时,在所述目标数据库文件的文件头部中增加预设标记;
所述确定目标数据库文件的指针指向的目标进程的第一虚拟内存空间满足扩展条件,包括:
当检测到所述目标数据库文件的文件头部存在所述预设标记时,确定所述目标数据库文件的指针指向的所述目标进程的所述第一虚拟内存空间满足扩展条件。
结合第一方面,在第二种可能的实现方式中,所述目标数据库文件的文件头部记录有所述目标数据库文件的长度;
所述确定目标数据库文件的指针指向的目标进程的第一虚拟内存空间满足扩展条件,包括:
当检测到所述目标数据库文件的长度与所述第一虚拟内存空间的长度不一致时,确定所述目标数据库文件的指针指向的所述目标进程的所述第一虚拟内存空间满足扩展条件。
结合第一方面,在第三种可能的实现方式中,所述将所述目标数据库文件的指针指向所述第二虚拟内存空间之后,还包括:
当确定所述第一虚拟内存空间不存在访问者时,释放所述第一虚拟内存空间。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述方法还包括:
当检测到所述目标进程调用对应所述第一虚拟内存空间的事务开始接口时,将所述第一虚拟内存空间对应的引用计数增加预设值;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于新华三技术有限公司,未经新华三技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811142236.3/2.html,转载请声明来源钻瓜专利网。





