版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(19)国家知识产权局(12)发明专利(10)授权公告号CN120091053B(65)同一申请的已公布的文献号(73)专利权人杭州悦数科技有限公司地址310000浙江省杭州市余杭区仓前街道时代未来之城5幢2201室(72)发明人王昌圆褚俊鹏吴世豪叶小萌(74)专利代理机构杭州裕阳联合专利代理有限公司33289专利代理师郜洪祥H04L67/568(2022.0审查员曹春燕一种基于gRPC协议的GQL图数据库服务端与客户端通信方法本申请公开了一种基于gRPC协议的GQL图数据库服务端与客户端通信方法,涉及数据传输技术领域,解决了现有技术中将查询结果返回给客户端时,需要将列存数据转换为行存格式所导致义GQL图数据库服务端与客户端之间的通信协由GQL图数据库服务端对查询结果进行序列化,由客户端进行反序列化,既避免了服务端列转行获取客户端的查询请求,将查询结果序列化为二进制数据,其中,在序列化时直接将内存中的列存进行序列化将所述二进制数据通过gRPC协议返还给客户端,以使得客户端能够通过对所述二进制数据进行反序列化解析还原出GQL图数据库的数据结构21.一种基于gRPC协议的GQL图数据库服务端与客户端通信方法,其特征在于,使用protobuf定义GQL图数据库服务端与客户端之间的通信协议,所述GQL图数据库服务端与客户端通信方法包括:获取客户端的查询请求,将查询结果序列化为二进制数据,其中,在序列化时直接将内存中的列存进行序列化;将所述二进制数据通过gRPC协议返还给客户端,以使得客户端能够通过对所述二进制数据进行反序列化解析还原出GQL图数据库的数据结构。2.根据权利要求1所述的基于gRPC协议的GQL图数据库服务端与客户端通信方法,其特征在于,将查询结果序列化为二进制数据过程中,使用null位图标记空值。3.根据权利要求1或2所述的基于gRPC协议的GQL图数据库服务端与客户端通信方法,其特征在于,将所述二进制数据通过gRPC协议返还给客户端之前,采用压缩算法对所述二进制数据进行压缩。4.一种基于gRPC协议的客户端与GQL图数据库服务端通信方法,其特征在于,使用protobuf定义GQL图数据库服务端与客户端之间的通信协议,所述客户端与GQL图数据库服务端通信方法包括:向GQL图数据库服务端发送查询请求以获取序列化为二进制数据的查询结果,其中,所述二进制数据为列存的;通过对所述二进制数据进行反序列化解析还原出GQL图数据库的数据结构。5.根据权利要求4所述的基于gRPC协议的客户端与GQL图数据库服务端通信方法,其特征在于,接收到二进制数据后,根据null位图对所述二进制数据进行解析还原出GQL图数据库的数据结构。6.根据权利要求4或5所述的基于gRPC协议的客户端与GQL图数据库服务端通信方法,其特征在于,在反序列化解析时,判断当前反序列化的向量是否为常量向量,若为常量向量,则对常量向量第一次反序列化后缓存所述常量向量的数据,后续每次反序列化解析所述常量向量时直接从缓存中获取所述常量向量的数据。7.根据权利要求4所述的基于gRPC协议的客户端与GQL图数据库服务端通信方法,其特征在于,所述二进制数据包含节点数据、边数据和路径数据,对节点数据、边数据和路径数据采用不同的反序列解析方式,具体包括:对节点数据进行反序列化解析包括:在小端模式中,从所述二进制数据的固定字段中解析出节点ID、节点类型ID、图ID和节点属性个数,根据节点属性个数循环解析节点属性名、节点属性类型和节点属性值,将所述节点属性名、节点属性类型和节点属性值存入节点对边数据进行反序列化解析包括:在小端模式中,从所述二进制数据的固定字段中解解析边属性名、边属性类型和边属性值,将所述边属性名、边属性类型和边属性值存入边属封装后返还;对路径数据进行反序列化解析包括:从所述二进制数据中解析出路径上的元素个数,其中,所述元素包括节点和边,循环解析所述二进制数据中的节点数据和边数据以获得元3素类型及对应的元素值,将所述元素类型及对应的元素值存入元素列表并返还。8.根据权利要求4、5和7中任一项所述的基于gRPC协议的客户端与GQL图数据库服务端通信方法,其特征在于,通过迭代解析的方式对所述二进制数据进行反序列化解析。9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储用于设备执行的程序代码,该程序代码包括用于执行如权利要求1-8中任一项所述方法的步骤。10.一种电子设备,其特征在于,所述电子设备包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1-8中任一项所述方法。4技术领域[0001]本申请涉及数据传输技术领域,尤其是一种基于gRPC协议的GQL图数据库服务端与客户端通信方法。背景技术[0002]在图数据库系统中,服务端与客户端之间的通信是实现数据查询和操作的关键环节。传统的通信方式通常采用文本协议或自定义二进制协议,这些方式在性能和扩展性上用在图数据库系统中仍面临序列化和反序列化的挑战。[0003]在GQL图数据库NebulaGraph服务中,数据通常采用列存格式,这种格式在数据存储和查询时具有高效性和压缩性,能提供较优的性能表现,然后当查询结果需要返回给客户端时,通常需要将列存数据转换为行存格式,这就存在几点性能开销:[0004]1.数据转换开销[0005]列存数据是按列存储的,而客户端通常期望行存格式的数据。因果之前,需要将列存数据转换为行存数据。这个转换过程涉及以下几个步骤:[0006]列数据重组:将按列存储的数据重新组织成按行存储的数据。[0008]数据序列化:将重组后的行存数据序列化为客户端可接受的格式(如JSON、CSV等)。[0009]2.性能开销[0012]时间开销:数据转换过程[0013]3.I/0开销[0014]列存格式转换为行存后导致数据量增加,网络传输延迟和带宽限制增加了数据传输时间。[0015]4.内存管理开销[0016]内存分配和释放:在数据转换过程中,需要动态分配和释放内存,以存储临时数据:在数据重组和序列化过程中,需要动态分配内存。转换完成后,需要释放临时分配的内发明内容[0017]本申请的目的在于克服现有技术中将查询结果返回给客户端时,需要将列存数据转换为行存格式所导致的数据转换开销、性能开销、I/0开销和内存管理开销较大的问题,提供一种基于gRPC协议的GQL图数据库服务端与客户端通信方法。[0018]第一方面,提供了一种基于gRPC协议的GQL图数据库服务端与客户端通信方5用protobuf定义GQL图数据库服务端与客户端之间的通信协议,所述GQL图数据库服务端与客户端通信方法包括:[0019]获取客户端的查询请求,将查询结果序列化为二进制数据,其中,在序列化时直接将内存中的列存进行序列化;[0020]将所述二进制数据通过gRPC协议返还给客户端,以使得客户端能够通过对所述二进制数据进行反序列化解析还原出GQL图数据库的数据结构。[0021]在一些可能的实现方式中,将查询结果序列化为二进制数据过程中,使用null位图标记空值,在列存时如果某个数据为空,则可以跳过该空数据直接存储下一个非空数据,客户端在解析某一列的数据时,先通过nullbitmap判断当前索引位置的数据是否为空,非空则读取字节码进行解析,为空则直接返回空数据即可,避免针对空数据的解析。[0022]在一些可能的实现方式中,将所述二进制数据通过gRPC协议返还给客户端之前,采用压缩算法对所述二进制数据进行压缩,通过对传输的二进制数据进行压缩,减少了网络传输的数据量。[0023]第二方面,一种基于gRPC协议的客户端与GQL图数据库服务端通信方法,使用protobuf定义GQL图数据库服务端与客户端之间的通信协议,所述客户端与GQL图数据库服务端通信方法包括:[0024]向GQL图数据库服务端发送查询请求以获取序列化为二进制数据的查询结果,其[0025]通过对所述二进制数据进行反序列化解析还原出GQL图数据库的数据结构。[0026]在一些可能的实现方式中,接收到二进制数据后,根据null位图对所述二进制数据进行解析还原出GQL图数据库的数据结构。[0027]在一些可能的实现方式中,在反序列化解析时,判断当前反序列化的向量是否为常量向量,若为常量向量,则对常量向量第一次反序列化后缓存所述常量向量的数据,后续每次反序列化解析所述常量向量时直接从缓存中获取所述常量向量的数据,常量向量是一种特殊的列式存储格式,用于表示某一列的所有值都相同的情况,它通过存储一个常量值和行数来优化存储和传输,由于常量向量值存储一个值,可以显著减少内存和网络传输的开销,在GQL图数据库中,常量向量与扁平向量结合可以高效的表示和存储数据,提升系统[0028]在一些可能的实现方式中,所述二进制数据包含节点数据、边数据和路径数据,对节点数据、边数据和路径数据采用不同的反序列解析方式,具体包括:[0029]对节点数据进行反序列化解析包括:在小端模式中,从所述二进制数据的固定字段中解析出节点ID、节点类型ID、图ID和节点属性个数,根据节点属性个数循环解析节点属性名、节点属性类型和节点属性值,将所述节点属性名、节点属性类型和节点属性值存入节graphSchema保存了图中点类型的名称与点类型ID的映射、边类型名称与边类型ID的映射、图名称和图ID的映射,客户端从二进制数据反序列化得到的点、边、图都是ID,这些ID根据graphSchema能够映射成对应的名称)封装后返回;[0030]对边数据进行反序列化解析包括:在小端模式中,从所述二进制数据的固定字段6循环解析边属性名、边属性类型和边属性值,将所述边属性名、边属性类型和边属性值存入信息(即graphSchema)封装后返还;[0031]对路径数据进行反序列化解析包括:从所述二进制数据中解析出路径上的元素个数,其中,所述元素包括节点和边,循环解析所述二进制数据中的节点数据和边数据以获得元素类型及对应的元素值,将所述元素类型及对应的元素值存入元素列表并返还。[0032]在一些可能的实现方式中,通过迭代解析的方式对所述二进制数据进行反序列化解析,用户通过迭代的方式从客户端获取查询结果,每次获取一行,在用户获取某行数据时,客户端针对该行数据进行反序列化解析。当用户不需要全部数据时,可有效避免额外的反序列化解析的开销,从而能够提升客户端数据处理的效率。[0033]第三方面,提供了一种计算机可读存储介质,所述计算机可读介质存储用于设备执行的程序代码,该程序代码包括用于执行如上述第一方面和第二方面中的任意一种实现方式中方法的步骤。[0034]第四方面,提供了一种电子设备,所述电子设备包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如上述第一方面和第二方面中的任意一种实现方式中的方法。[0035]本申请具有如下有益效果:本申请的GQL图数据库服务端与客户端通信方法通过使用protobuf定义GQL图数据库服务端与客户端之间的通信协议,支持图数据库特有的数据结构,提高了协议的表达能力和扩展性,其次,在序列化时直接将内存中的列存进行序列化,减少了序列化与反序列化的时间开销,提高了数据传输的效率,通过定义高效的通信协议和序列化反序列化方式,实现了GQL图数据库服务端与客户端之间的高性能、高可靠性的数据通信。附图说明[0036]构成本申请的一部分的附图用于来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。[0037]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0038]图1是本申请实施例1的基于gRPC协议的GQL图数据库服务端与客户端通信方法的[0039]图2是本申请实施例2的基于gRPC协议的客户端与GQL图数据库服务端通信方法的流程图;[0040]图3是本申请实施例4的电子设备的内部结构示意图。具体实施方式[0041]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于7本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。[0042]实施例1[0043]如图1所示,本申请实施例1所涉及的一种基于gRPC协议的GQL图数据库服务端与客户端通信方法,包括以下步骤:[0044]首先需要进行协议的定义:使用ProtocolBuffers(即protobuf)定义服务端与客户端之间的通信协议,包括请求和响应的消息格式。[0045]示例性的,序列化流程:[0046]S1、设置版本标识:填充data_layout_version字段,标记数据布局版本(如v1.0)。[0047]S2、构建元数据对象VectorTableMetaData:[0048]定义VectorTable的类型,包括扁平向量和常量向量等;[0049]计算当前查询结果包含的数据总记录数num_records;[0050]指定当前查询结果中数据的数据类型table_type,例如:节点数据、边数据和路径数据;[0051]确定当前查询结果中包括多少批次数量num_batches;[0052]设置time_zone_offset和字节序is_little_endian;[0053]关联图模式graph_schema(定义属性、节点/边类型等);[0054]将数据按固定大小或逻辑单元切分为多个VectorBatch;[0055]每个批次对应一个VectorBatch,包含多个NestedVector(列或嵌套列)。[0056]S3、构建嵌套向量NestedVector,嵌套向量NestedVector包括设置当前向量中包括多少个向量(对应到数据中的多少列)、子向量公共元数据(如数据类型、长度)、向量特殊元数据、向量中存储结果数据的二进制数据、空值位图和子向量集合。[0057]S4、序列化与存储:[0058]将所有VectorBatch按顺序序列化为二进制流;[0059]将完整的VectorResultTable写入文件或网络传输。[0060]在序列化时,从顶层开始构建VectorResultTable,填充元数据,然后分批次处理数据,每个批次包含嵌套的向量结构,同时处理空值位图,而在进行反序列化时则相反,先解析顶层结构,再逐层解包元数据和实际数据,处理空值位图以确定有效数据的位置。[0061]S101、GQL图数据库服务端从客户端获取查询请求,将查询结果序列化为二进制数据,其中,在序列化时直接将内存中的列存进行序列化;[0062]具体的,GQL图数据库服务端将查询结果按列存格式序列化为二进制数据,并使用null位图(即nullbitmap)标记空值,即在列存时如果某个数据为空,则可以跳过该空数据直接存储下一个非空数据,客户端在解析某一列的数据时,先通过nullbitmap判断当前索引位置的数据是否为空,非空则读取字节码进行解析,为空则直接返回空数据即可,避免针对空数据的解析。[0063]其次,在列存中分别用常量向量和扁平向量存储数据,扁平向量是一种按列存储的数据结构,每个列的值是独立存储的,它适用于存储具有不同值的列数据,通常用于表示查询结果中的多行数据,存储多行数据时内存占用较大。常量向量是一种特殊的列式存储格式,用于表示某一列的所有值都相同的情况,它通过存储一个常量值和行数来优化存储8和传输。[0064]在本实施例中,由于常量向量值存储一个值,可以显著减少内存和网络传输的开销。在图数据库中,常量向量和扁平向量的结合可以高效的表示和存储数据,提升系统性[0065]需要说明的是,通常在服务端和客户端通信时会将要传输的数据转换成通信协议中所定义的格式和数据类型,而GQL图数据库服务端存储的数据是列存储,那就需要将原先列存储的数据分别拷贝到上述定义的Row和Value结果中,然后再对数据进行序列化,这个过程就需要对数据在内存中进行多次拷贝。[0066]在本实施例中,在序列化的时候是直接将内存中的列存进行序列化,避免了中间转换数据结构的操作,所以可以做到零拷贝,避免数据在内存中的多次拷贝,直接在内存和网络之间传输数据,减少内存开销和CPU占用,同时平衡客户端反序列化的易用性,仅对于部分存储内存地址的数据进行拷贝,方便客户端直接读取数据二进制进行反序列化,例如:对于部分数据结构如String字符串,由于GQL图数据库服务端在使用时是通过一个链接地址进行访问数据的,为了方便客户端能直接拿到数据不做地址的刷新,所以String类型是进行了拷贝,拷贝成String类型的一列再进行序列化成二进制数据的。[0067]S102、GQL图数据库服务端将步骤S101中的二进制数据通过gRPC协议返还给客户端,以使得客户端能够通过对该二进制数据进行反序列化,从而能够解析还原出GQL图数据[0068]在进一步的实施例中,为了提高数据传输的效率,减少网络延迟,通过通信协议压缩算法如Deflate或Gzip对需要返回给客户端的二进制数据进行压缩,以减少传输的二进[0069]示例性的,二进制数据进行压缩包括:创建用于数据压缩的Deflater对象,输入压缩的数据,待数据输入完成后开始进行压缩,定义字节数组compressedData来存储压缩后的数据,将压缩后的数据写入字节数组compressedData,待压缩完毕后释放资源即可得到压缩后的数据。[0070]在本实施例中提出一种grpc通信传输的数据协议格式,GQL图数据库服务端直接将列存数据进行序列化,由客户端进行反序列化,既避免了GQL图数据库服务端列转行导致的查询延迟高的情况,又降低了数据转换开销、性能网络传输字节,使整体性能提高,通过使用protobuf定义GQL图数据库服务端与客户端之间数据库服务端在序列化时直接将内存中的列存进行序列化,减少了序列化时间开销,提高了数据传输的效率,通过定义高效的通信协议和序列化反序列化方式,实现了GQL图数据库服务端与客户端之间的高性能、高可靠性的数据通信。[0071]实施例2[0072]如图2所示,本申请实施例2所涉及的一种基于gRPC协议的客户端与GQL图数据库[0073]同样的,首先需要进行协议的定义:使用ProtocolBuffers(protobuf)定义服务端与客户端之间的通信协议,包括请求和响应的消息格式,序列化与反序列化的流程与实9[0074]S201、客户端向GQL图数据库服务端发送查询请求以获取序列化为二进制数据的使用null位图(即nullbitmap)标记空值,客户端在解析某一列的数据时,先通过[0078]//解析指定字段的数据[0079]publicObjec[0083]if(!vector.isNull[0086]if((vector.getNullBitMap().byteAtkOneBitmasks[bitIndex][0087][0092]反序列化节点数据:[0095]//二进制数据表示为:8byte的节点id,4byte的图id,2byte的属性个数。以下解析均为小端模式[0096]//从向量二进制数据中解析节点id[0097]longnodeId[0098]//从节点id中取高16位作为节点类型的id[0099]intnodeTypeId=get[0100]//从向量二进制数据中解析图的id[0101]intnodeGraphId=byt[0102]//从向量二进制数据中解析节点属性个数[0103]intnodePropNum[0104]reader.read(ELEMENT_NUMBER_SIZE_FOR_ANY_VALUE),byteOrder);[0105]Map<String,ValueWrapper>nodeProperties[0106]//根据属性个数循环解析属性数据[0107]for(int[0108]//解析属性名[0109]StringpropN[0110]//获取属性数据类型[0111]ColumnTy[0112]bytesToUInt8(reader.re[0113]//解析属性数据[0114]Object[0115]nodeProperties.put(propName,newValueWrapper[0117]//返回节点结构[0118]returnnewNode(nonodeProperties,graphSche[0119]反序列化边数据:[0121]case[0122]//二进制数据表示为:8byte的源节点id,8byte的目标节点id,8byte的边rank,4byte的图id,4byte的边类型id,2byte的属性个数。以下解析均为小端模式[0123]//从向量二进制数据中解析源节点id[0124]longsrcNodeId[0125]//从向量二进制数据中解析目标节点id[0126]longdstNodeId[0127]//从向量二进制数据中解析边的rank11[0128]longrank[0129]//从向量二进制数据中解析图的id[0130]intedgeGraphId=bytesToInt32(rea[0131]//从向量二进制数据中解析边类型id[0132]intedgeTypeId=bytesToInt3[0133]//从向量二进制数据中解析边属性个数[0134]intedgePropNu[0135]reader.read(ELEMENT_NUMBER_SIZE_FOR_ANY[0136]Map<String,ValueWrapper>edgeProperties=[0137]//根据属性个数循环解析属性数据[0138][0139]//解析属性名[0140]String[0141]//获取属性数据类型[0142]ColumnTy[0143]bytesToUInt8(reader.read(VALUE_TYPE_SIZE)));[0144]Object[0145]//解析属性数据[0146]edgeProperties.put(p[0148]//返回边结构[0149]returnnew[0154][0156]反序列化路径数据:[0157]//路径数据[0158]case[0159]//从向量二进制数据中解析路径上的元素个数(即该路径包括多少点和边)[0160]int[0161]reader.read(ELEME[0162]List<Val[0163]//循环解析二进制数据中的点边数据[0164]for(in[0165]([0166]bytesToUInt8(reader[0167]Objectelement[0168]eleValues.add(new[0172]为了降低反序列化开销,用户通过迭代的方式从客户端获取查询结果,每次获取一行,在用户获取某行数据时,客户端针对该行数据进行反序列化。当用户不需要全部数据时,可有效避免额外的反序列化的开销,提升客户端数据处理的效率。[0173]在本实施例中提出一种grpc通信传输的数据协议格式,GQL图数据库服务端直接将列存数据进行序列化,由客户端进行反序列化,既避免了GQL图数据库服务端列转行导致网络传输字节,使整体性能提高,通过使用protobuf定义GQL图数据库服务端与客户端之间的通信协议,支持图数据库特有的数据结构,提高了协议的表达能力和扩展性,其次,在序列化时直接将内存中的列存进行序列化,减少了客户端反序列化的时间开销,提高了数据传输的效率,通过定义高效的通信协议和序列化反序列化方式,实现了客户端与GQL图数据库服务端之间的高性能、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中文言文试题及答案
- 春季电焊工试题及答案
- 车辆运输试题及答案
- 手术室沟通技巧与协作
- 多发伤患者的内分泌系统并发症护理
- 宠物日常护理基础课程
- 护理防淤青的科学知识
- 护理教育:教学成果展示
- 护理管理中的PDCA循环培训
- 护理实践中的沟通技巧与人文关怀
- 湘江战役教学课件
- WeleUnitDiscoveringUsefulStructures句子基本结构课件-高中英语人教版
- 【单词表】外研版四年级英语下册全册词汇表(带音标)
- 医保基金管理培训课件
- 2025年文物保护工程从业资格考试(责任工程师古文化遗址古墓葬)测试题及答案(宁波)
- 2025浙江宁波江北区机关事业单位招聘编外人员1人考试参考题库及答案解析
- 平安保额销售法课件
- DB46-T 481-2019 海南省公共机构能耗定额标准
- 2024人教版八年级英语上册 第1-8单元知识点总结(单词+短语+句子+语法)
- DB11∕T 2301-2024 城市道路慢行交通系统综合评价指标体系
- 设计人工合同范本
评论
0/150
提交评论