一种基于RPC代理解决多进程同时读写RocksDB的方法技术

技术编号:34323482 阅读:67 留言:0更新日期:2022-07-31 00:40
本发明专利技术公开了一种基于RPC代理解决多进程同时读写RocksDB的方法,在RocksDB服务端,需要先启动RPC代理服务端模块,进程的随后读写等操作和RocksDB原始使用方式没有区别,在RocksDB客户端,不论是和RocksDB服务器端同样的服务器还是其他节点服务器,都需要先启动RPC代理客户端模块,RPC代理客户端服务模块通过RPC自动连接到RPC代理服务端模块,准备就绪后进程的读写等操作流程和RocksDB原始使用方式没有区别,本发明专利技术基于RPC代理解决多进程同时读写RocksDB的方法,通过三个新增加的模块,可以实现基于RPC代理解决多进程无法同时访问RocksDB的问题。RocksDB的问题。RocksDB的问题。

A method based on RPC proxy to solve multi process reading and writing rocksdb at the same time

【技术实现步骤摘要】
一种基于RPC代理解决多进程同时读写RocksDB的方法


[0001]本专利技术涉及RPC和RocksDB产品
,具体的是基于RPC代理解决多进程同时读写RocksDB的方法。

技术介绍

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

Value型数据持久性存储的C++程序库,RocksDB是由Facebook开发并开源,基于Google开源的LevelDB基础上做的二次开发。比较知名的项目如TiKV,MyRocks,CrockRoach等。随着RocksDB被大量广泛的使用,一个明显的缺陷限制了它的继续发展,RocksDB虽然允许多进程访问,但是只有一个进程是可写方式,其他进程都是只读方式。而现实中有这样一个明显的使用场景:一个进程读写RocksDB,其他本地进程甚至远程进程也同时读写同一个RocksDB,这种场景RocksDB没有给出理想的方案。

技术实现思路

[0003]为解决上述
技术介绍
中提到的不足,本专利技术的目的在于提供一种基于RPC代理解决多进程同时读写RocksDB的方法,具有两个重要的特质,一个是基于RPC的服务端和客户端。另外一个是多个进程可以同时发起各种读写请求。
[0004]本专利技术的目的可以通过以下技术方案实现:
[0005]一种基于RPC代理解决多进程同时读写RocksDB的方法,包括以下步骤:
[0006]S1,RocksDB客户端应用程序试图打开RocksDB,
[0007]S2,如果RocksDB没有打开,先检查RPC服务端模块是否启动,如果没有就启动起来,将RocksDB相应的读写请求接口以回调函数形式保存下来,然后将读写请求发送至RocksDB的读写请求模块,最后再发送给RocksDB本身,响应原路返回,
[0008]S3,如果RocksDB已经打开,先检查是否第一次连接,如果不是将RPC客户端必要信息注册给RPC服务端模块,否则将读写请求发送给RPC客户端模块,
[0009]S4,RPC客户端模块将读写请求通过RPC连接模块发送给RPC服务端模块,
[0010]S5,RPC服务端模块将读写请求直接发送到已经保存的RocksDB原始的读写请求回调函数接口,
[0011]S6,RocksDB原始的读写请求接口模块将读写请求直接发送给RocksDB本身,
[0012]S7,RocksDB处理读写请求并从底层的存储系统获取响应,随后将响应原路返回给客户端应用程序。
[0013]作为本专利技术的一种优选方案,所述RocksDB还包括RPC客户端模块、RPC连接模块和RPC服务端模块;
[0014]RPC客户端模块:负责接收从本地或者远程的客户端进程发出的读写请求,包括并不限于K

V数据库的Get/Put/Delete/Sync/Close/BatchPutDelete/Has/GetSize/Query必要接口,并负责通过RPC连接模块转发上述请求至RPC服务端模块,
[0015]RPC连接模块:负责转发和接收RPC客户端模块和RPC服务端模块之间的所有通讯,
[0016]RPC服务端模块:负责接收和响应来在于通过RPC连接模块传递过来的RPC客户端模块发来的请求。
[0017]本专利技术的有益效果为:
[0018]1、本专利技术通过三个新增加的模块,可以实现基于RPC代理解决多进程无法同时访问RocksDB的问题。
附图说明
[0019]下面结合附图对本专利技术作进一步的说明。
[0020]图1是本专利技术的流程示意图;
[0021]图2是本专利技术中RPC客户端模块、RPC连接模块和RPC服务端模块的原理框图。
具体实施方式
[0022]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本专利技术保护的范围。
[0023]如图1

图2所示,一种基于RPC代理解决多进程同时读写RocksDB的方法,包括以下步骤:
[0024]S1,RocksDB客户端应用程序试图打开RocksDB,
[0025]S2,如果RocksDB没有打开,先检查RPC服务端模块是否启动,如果没有就启动起来,将RocksDB相应的读写请求接口以回调函数形式保存下来,然后将读写请求发送至RocksDB的读写请求模块,最后再发送给RocksDB本身,响应原路返回,
[0026]S3,如果RocksDB已经打开,先检查是否第一次连接,如果不是将RPC客户端必要信息注册给RPC服务端模块,否则将读写请求发送给RPC客户端模块,
[0027]S4,RPC客户端模块将读写请求通过RPC连接模块发送给RPC服务端模块,
[0028]S5,RPC服务端模块将读写请求直接发送到已经保存的RocksDB原始的读写请求回调函数接口,
[0029]S6,RocksDB原始的读写请求接口模块将读写请求直接发送给RocksDB本身,
[0030]S7,RocksDB处理读写请求并从底层的存储系统获取响应,随后将响应原路返回给客户端应用程序。
[0031]考虑到RocksDB本身是C++语言实现,同时在它之上有其他编程语言的实现,包括Golang,Python,Rust和Java语言等,本专利技术的实现方式是在Golang的基础上完成的。而RPC的实现方式也可以采用多种方式,比如gRPC或者Golang自带的RPC库,基于性能和简便性的考量,本专利技术实现方式采用的是Golang自带的RPC库。
[0032]所述RocksDB还包括RPC客户端模块、RPC连接模块和RPC服务端模块;
[0033]RPC客户端模块:负责接收从本地或者远程的客户端进程发出的读写请求,包括并不限于K

V数据库的Get/Put/Delete/Sync/Close/BatchPutDelete/Has/GetSize/Query等必要接口,并负责通过RPC连接模块转发上述请求至RPC服务端模块,同时在第一次启动时
需要连接到RPC服务端模块,将自己的标识发送给RPC服务端模块,随后的读写数据请求会使用随机的UUID唯一指定符标识此次请求,
[0034]RPC连接模块:只负责转发和接收RPC客户端模块和RPC服务端模块之间的所有通讯,可以采用Golang自带的RPC模块,
[0035]RPC服务端模块:负责接收和响应来在于通过RPC连接模块传递过来的RPC客户端模块发来的请求,此模块只会启动并只有一个实例,以IP地址和端口的组合方式等待RPC客户端模块建立连接,启动时会将RocksDB的读写接口全部登记在自己的模块里,等待RPC客户端模块发送建立连接请求,建立连接请求后需要记本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于RPC代理解决多进程同时读写RocksDB的方法,其特征在于,包括以下步骤:S1,RocksDB客户端应用程序试图打开RocksDB,S2,如果RocksDB没有打开,先检查RPC服务端模块是否启动,如果没有就启动起来,将RocksDB相应的读写请求接口以回调函数形式保存下来,然后将读写请求发送至RocksDB的读写请求模块,最后再发送给RocksDB本身,响应原路返回,S3,如果RocksDB已经打开,先检查是否第一次连接,如果不是将RPC客户端必要信息注册给RPC服务端模块,否则将读写请求发送给RPC客户端模块,S4,RPC客户端模块将读写请求通过RPC连接模块发送给RPC服务端模块,S5,RPC服务端模块将读写请求直接发送到已经保存的RocksDB原始的读写请求回调函数接口,S6,RocksDB原始的读写请求接口模块将读写请求直接发送给Ro...

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

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

1