一种基于RPC代理解决多进程访问LevelDB的方法技术

技术编号:33353207 阅读:10 留言:0更新日期:2022-05-08 10:03
本发明专利技术涉及RPC访问LevelDB领域,具体的是一种基于RPC代理解决多进程访问LevelDB的方法,所述方法包括以下步骤:S1、在LevelDB服务器端,启动RPC代理服务器端模块,完成随后的进程读写操作;S2、在LevelDB客户端,启动RPC代理客户端模块,RPC代理客户端模块通过RPC连接模块自动连接到RPC代理服务器端模块,准备就绪后完成随后的进程读写操作。本发明专利技术基于RPC的服务器端和客户端,本地和远程的多个进程都可以对LevelDB同时发起各种读写请求,可以为LevelDB带来更大的使用弹性和便利性,同时避免了大量不必要的存储空间浪费。免了大量不必要的存储空间浪费。免了大量不必要的存储空间浪费。

【技术实现步骤摘要】
一种基于RPC代理解决多进程访问LevelDB的方法


[0001]本专利技术涉及RPC访问LevelDB领域,具体的是一种基于RPC代理解决多进程访问LevelDB的方法。

技术介绍

[0002]LevelDb是能够处理十亿级别规模Key

Value型数据持久性存储的C++程序库,LevelDB是由Google开发并开源,比较知名的项目如Chrome浏览器以及IPFS文件系统底层都使用LevelDB作为元数据的管理引擎。随着LevelDB被大量广泛的使用,一个明显的缺陷限制了它的继续发展,LevelDB只允许单进程访问,如果想实现并发,只能通过单进程下的多线程完成并发的效果,而现实中有两个明显的使用场景:一个进程读写LevelDB,其他进程对LevelDB做只读操作;一个进程读写LevelDB,其他本地进程甚至远程进程也同时读写同一个LevelDB。
[0003]这两种场景LevelDB都没有给出理想的方案;第一个问题迂回的解决方案普遍使用的是对其他只读LevelDB的进程,需要重新拷贝一份LevelDB数据,带来的弊端就是对存储空间不必要的浪费,尤其是在数据量达到TB甚至PB级别而且存在多个只读进程的需求。第二个问题就完全没有成熟的解决方案。

技术实现思路

[0004]为解决上述
技术介绍
中提到的不足,本专利技术的目的在于提供一种基于RPC代理解决多进程访问LevelDB的方法。
[0005]本专利技术的目的可以通过以下技术方案实现:
[0006]一种基于RPC代理解决多进程访问LevelDB的方法,所述方法包括以下步骤:
[0007]S1、在LevelDB服务器端,启动RPC代理服务器端模块,完成随后的进程读写操作;
[0008]S2、在LevelDB客户端,启动RPC代理客户端模块,RPC代理客户端模块通过RPC连接模块自动连接到RPC代理服务器端模块,准备就绪后完成随后的进程读写操作。
[0009]进一步地,所述RPC代理客户端模块、RPC代理服务器端模块和RPC连接模块均为新增模块。
[0010]进一步地,所述RPC代理客户端模块负责接收从本地或者远程的客户端进程发出的读写请求,包括K

V数据库的Get、Put、Delete、Sync、Close、BatchPutDelete、Has、GetSize、Query多种必要接口,并负责通过RPC连接模块转发上述读写请求至RPC代理服务器端模块,同时在第一次启动时连接到RPC代理服务器端模块,将自己的标识发送给RPC代理服务器端模块,随后的读写数据请求使用随机的UUID唯一指定符标识此次请求。
[0011]进一步地,所述RPC连接模块负责转发和接收RPC代理客户端模块和RPC代理服务器端模块之间的所有通讯。
[0012]进一步地,所述RPC代理服务器端模块负责接收和响应来在于通过RPC连接模块传递过来的RPC代理客户端模块发来的请求。
[0013]进一步地,所述RPC代理服务器端模块启动仅有的一个实例,以IP地址和端口的组合方式等待RPC代理客户端模块建立连接,将LevelDB的读写接口均登记在自己的模块里,等待RPC代理客户端模块发送建立连接请求,建立连接请求后记载RPC代理客户端的标识;
[0014]同时,接收读写请求时将RPC代理客户端模块的等待读写请求发送过来时转发给LevelDB本身,等读写响应从LevelDB返回时,按照从RPC代理客户端模块发送过来的UUID查询到之前的请求,并将响应发送回RPC代理客户端模块相应的那次请求。
[0015]进一步地,所述S2中新增模块准备就绪后,S2的具体步骤如下:
[0016]1)、LevelDB客户端应用程序试图打开LevelDB:
[0017]①
如果LevelDB没有打开,先检查RPC代理服务器端模块是否启动,如果没有则启动RPC代理服务器端模块,将LevelDB相应的读写请求接口以回调函数形式保存下来,然后将读写请求发送至LevelDB的读写请求模块,最后再发送给LevelDB本身,响应原路返回;
[0018]②
如果LevelDB已经打开,先检查是否第一次连接,如果不是将RPC代理客户端必要信息注册给RPC代理服务器端模块,否则将读写请求发送给RPC代理客户端模块;
[0019]2)、RPC代理客户端模块将读写请求通过RPC连接模块发送给RPC代理服务器端模块;
[0020]3)、RPC代理服务器端模块将读写请求直接发送到已经保存的LevelDB原始的读写请求回调函数接口;
[0021]4)、LevelDB原始的读写请求接口模块将读写请求直接发送给LevelDB本身;
[0022]5)、LevelDB处理读写请求并从底层的存储系统获取响应,随后将响应原路返回给客户端应用程序。
[0023]本专利技术的有益效果:
[0024]本专利技术基于RPC的服务器端和客户端,本地和远程的多个进程都可以对LevelDB同时发起各种读写请求,可以为LevelDB带来更大的使用弹性和便利性,同时避免了大量不必要的的存储空间浪费。
附图说明
[0025]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图;
[0026]图1是本专利技术基于RPC代理解决多进程访问LevelDB的方法示意图;
[0027]图2是本专利技术新增模块准备就绪后的具体步骤示意图。
具体实施方式
[0028]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本专利技术保护的范围。
[0029]如图1所示,一种基于RPC代理解决多进程访问LevelDB的方法,所述方法包括以下步骤:
[0030]S1、在LevelDB服务器端,启动RPC代理服务器端模块,完成随后的进程读写操作;
[0031]S2、在LevelDB客户端,启动RPC代理客户端模块,RPC代理客户端模块通过RPC连接模块自动连接到RPC代理服务器端模块,准备就绪后完成随后的进程读写操作,RPC代理客户端模块、RPC代理服务器端模块和RPC连接模块均为新增模块。
[0032]各模块的作用如下:
[0033]RPC代理客户端模块:负责接收从本地或者远程的客户端进程发出的读写请求,包括K

V数据库的Get、Put、Delete、Sync、Close、BatchPutDelete、Has、GetSize、Query多种必要接口,并负责通过RPC连接模块转发上述读写请求至RPC代本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于RPC代理解决多进程访问LevelDB的方法,其特征在于,所述方法包括以下步骤:S1、在LevelDB服务器端,启动RPC代理服务器端模块,完成随后的进程读写操作;S2、在LevelDB客户端,启动RPC代理客户端模块,RPC代理客户端模块通过RPC连接模块自动连接到RPC代理服务器端模块,准备就绪后完成随后的进程读写操作。2.根据权利要求1所述的一种基于RPC代理解决多进程访问LevelDB的方法,其特征在于,所述RPC代理客户端模块、RPC代理服务器端模块和RPC连接模块均为新增模块。3.根据权利要求2所述的一种基于RPC代理解决多进程访问LevelDB的方法,其特征在于,所述RPC代理客户端模块负责接收从本地或者远程的客户端进程发出的读写请求,包括K

V数据库的Get、Put、Delete、Sync、Close、BatchPutDelete、Has、GetSize、Query多种必要接口,并负责通过RPC连接模块转发上述读写请求至RPC代理服务器端模块,同时在第一次启动时连接到RPC代理服务器端模块,将自己的标识发送给RPC代理服务器端模块,随后的读写数据请求使用随机的UUID唯一指定符标识此次请求。4.根据权利要求2所述的一种基于RPC代理解决多进程访问LevelDB的方法,其特征在于,所述RPC连接模块负责转发和接收RPC代理客户端模块和RPC代理服务器端模块之间的所有通讯。5.根据权利要求2所述的一种基于RPC代理解决多进程访问LevelDB的方法,其特征在于,所述RPC代理服务器端模块负责接收和响应来在于通过RPC连接模块传递过来的RPC代理客户端模块发来的请求。6.根据权利要求5所述的一种基于RPC代理解决多进程访问LevelDB的方法,其特征在于,所述...

【专利技术属性】
技术研发人员:吴波于淼
申请(专利权)人:深圳哈希街区科技有限公司
类型:发明
国别省市:

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

1