本申请涉及数据库
技术领域:
,尤其涉及一种数据格式转换方法和装置。
背景技术:
:随着数据库技术的发展,以及大数据技术的推广应用,为了满足不同数据库之间数据的交互操作,和数据库对不同格式的数据的存储需求,相应的产生种类繁多的数据格式,在实际应用中,不同数据库之间进行交互,经常需要将一种数据格式转换为另外一种数据格式,例如在web应用时,大多使用关系型数据库(比如mysql和oracal)来存储结构化的资源数据,然而大多数关系型数据库都是磁盘型数据库,大量数据访问时存在磁盘i/o瓶颈,已经成为制约整个数据库系统的处理速度和扩展性的瓶颈,而一些高效的内存型数据库(比如redis数据库),具有很高的读写速度,但是由于缺乏一种数据格式转换方法,使得redis数据库难以储存复杂格式的数据结构,导致降低了不同数据库之间进行数据交互和数据处理的速度,也降低了数据库对不同数据格式和复杂数据结构的存储能力。技术实现要素:本申请提供一种数据格式转换方法,用以解决目前具有不同数据格式的数据库之间进行数据交互的效率低、数据库对复杂数据结构的数据存储能力低、数据格式的转换效率低等问题。包括如下步骤:基于待转换数据中的指令参数执行映射操作;替换所述待转换数据中指定的字符为预设的字符。对应的,本申请还提供一种数据格式转换装置包括:转换模块,用于基于待转换数据的指令参数执行映射操作;替换所述带转换数据中指定的字符为预设字符;还用于基于待转换数据的指令参数,将所述待转换数据中特定的数据序列化或基于分隔符分解为字符串。此外,还包括判断模块,用于判断待转换数据的指令参数的功能类型。结构化模块,在得到所述字符串后,所述结构化模块将待转换数据中的关键参数建立键值对关系的数据结构。本申请提供的数据格式转换方法和装置,实现将数据格式转换为相应需要的数据格式,有效提升了具有不同数据格式的数据库之间的数据传输效率,提升数据库的数据存储能力和数据格式转换效率。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例提供的数据格式转换方法具体步骤的流程图;图2是本申请实施例提供的数据格式转换装置的结构图;图3为本申请实施例提供的转换步骤流程图;图3a为本申请实施例提供的步骤s222具体步骤的流程图;图3b为本申请实施例提供的步骤s223具体步骤的流程图;图4为本申请实施例提供的采用redishash数据类型创建用户信息的示意图;图5为本申请实施例提供的采用redishash数据类型查询用户信息的示意图;图6为本申请实施例提供的采用redishash数据类型修改用户信息的示意图;图7为本申请实施例提供的采用redishash数据类型删除用户信息的示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。实施例1一种数据格式转换方法,步骤流程图如图1所示,包括如下步骤:s1,基于待转换数据的指令参数执行映射操作;判断待转换数据中包含的指令参数的功能类型,不同的指令参数具有不同的功能,而且不同指令参数对应着不同的执行步骤和输出结果等,所以首先判断待转换数据的指令参数或操作命令的功能类型。基于所述待转换数据中指令参数或操作命令的功能类型,调用映射函数或者建立映射关系,将所述指令参数映射到表示相同功能的预先设定的指令参数或操作命令。具体来说,先通过解析函数将待转换数据进行分解,提取需要转换的参数,包括指令参数或操作命令等,然后将得到的指令参数或操作命令进行功能类型的判断,根据不同的功能类型进行相应的映射操作。该映射功能的实现,可以直接调用预先设定的映射函数,也可以临时建立映射关系,输入指令参数后可以直接得到所预先设定的操作命令,为下一步操作命令或指令参数的执行做准备。s2,替换所述待转换数据中指定的字符为预设的字符;需要说明的是,这里所说的字符可以是分隔符。具体来说,通过查找函数,可以确定到待转换数据中的指定字符,将该指定字符替换为预设的字符。字符替换的方法还可以不通过对该字符查找,直接实现将指定字符替换为预设字符,即可以通过对指定位置的内容的替换的方法。因此,在实际操作中,可以根据实际执行效率或编程的复杂程度等因素,选择合适的进行字符替换的方法。需要说明的是,之所以需要进行分隔符的替换,是因为待处理数据的格式当中采用一种字符作为分隔符,但是目标格式采用另外一种字符作为分隔符,为了满足数据传输和存储等操作的需求,需要将待处理数据当中的分隔符替换为目标格式的分隔符。进一步,根据实际的数据格式转换需求,数据格式转换方法中,进一步还包括,基于待转换数据的指令参数,将所述待转换数据中的对应的数据序列化或基于分隔符分解为字符串。得到所述字符串后,进一步还包括,将待转换数据中的关键参数建立键值对关系的数据结构,经过这样的关联操作,能够有效提高数据库之间数据交互的效率,同时提升数据库对不同格式的数据的存储能力。需要说明的是,操作命令的映射、分隔符的替换、数据参数序列化或按照分隔符进行分解的操作,可以顺序或同时执行,某些条件下,执行顺序也不影响数据的输出结果,所以上述步骤的执行顺序需要根据使用情况进行选择。实施例2基于本发明的思路,还提供了一种数据格式转换装置,该装置的结构示意图如图2所示,数据格式转换装置包括判断模块1,具体提取方法是通过api功能接口对接收到的数据进行分解,然后通过查找关键字符或字符串确定需要提取分解数据中的关键参数。用户还可以根据提取对象、数量、效率等的需求,采用其他提取方法,这里就不一一赘述,然后通过判断模块1判断指令参数的类型,不同的指令需要执行的步骤、调用的参数等都是不同的,完成指令参数的判断后,执行数据转换操作。还包括转换模块2,用于执行具体的转换操作,具体来说:能够用于根据待转换数据中的指令参数的类型进行映射操作,即将一种格式的操作命令映射到具有相同功能的另一种格式的操作命令。还用于将待处理数据中的分隔符替换为预设的分隔符,方便对数据的识别、传输、存储等操作的进行。还用于根据待处理数据的指令参数的类型,进行序列化或者基于分隔符分解为字符串或子字符串,便于后续的数据存储和传输。为了满足实际转换需求,该转换装置2还能够实现不同的操作命令之间的映射,即将一种数据库所发出的操作命令,按照其功能类型映射为另外一个或几个数据库能够执行的相同功能的操作命令,具体的人员在转换装置2的转换函数当中定义不同操作命令的一对一映射或多对多映射。还包括结构化模块3,在得到所述字符串后,所述结构化模块将待转换数据中的关键参数建立键值对关系的数据结构;该结构化模块3的主要作用是将一条命令当中包含的属性信息和参数信息建立一定的对应关系,为了解决数据库是无法存储复杂格式的数据结构,可以将属性和参数整体建立一种键值对关系的数据结构后进行数据传输和存储,参数经过转换后可以得到字符串类型、或者还可以是键值对类型,具体根据数据库所能够处理的数据类型进行选择。实施例3基于同一发明构思,上述数据格式转换方法可以应用在以下实施例,以一个web客户端发出的http请求作为初始数据格式,将它转换为redishash数据库所能处理的数据格式为例,如图3所示,来具体说明本发明的方法。s21,提取http请求数据中的请求方法、uri和请求参数。需要说明的是,该http请求数据对应上述实施例的待处理数据,请求方法对应上述实施例的所述指令参数或操作命令。http请求包括httpget、httppost、httpput和httpdelete这样的一些,对应基本的增删查改操作,为此,通过restfulapi将请求分解为请求头,请求行和请求体,具体来说,客户端发出的http请求数据通过restfulapi接收并将http请求数据解析,进一步提取出需要的请求方法、uri、请求参数,通过采用restfulapi能够自动匹配http请求,不需要人手动进行操作,降低人员工作强度;将restfulapi与redis数据库存储之间相关联,为redis数据库设计提供了一种相对通用的设计范式,降低开发和维护的难度和成本,提高处理效率;进一步的,得到http请求中所包含的请求方法,统一资源标识符(uri)和请求参数,这里的请求方法和统一资源标识符(uri)即为原http请求中所包含的请求行中的参数,而请求参数则为请求体的参数。而redis是一个key-value存储系统,一对key-value数据就是redis数据库的基本存储单元;rediskey是该存储单元的索引,redisvalue是该存储单元的值,在redishash结构中,hash数据结构相关操作的一般格式是:commandkey[field][value]。其中,command是redis的命令,key是rediskey(键),field是hash数据结构的key(键),value是hash数据结构的value(值)。即这里key所对应的值可以是嵌套结构,[field][value](键值对)共同构成了值。这样的数据结构,可以实现redis数据库对复杂结构的数据的存储。接下来具体解释本发明如何将http请求的方法映射到redis数据库的操作命令,以及转换uri和请求参数的格式;上述三个部分不分先后顺序,也可以并列执行,从而提高处理效率。s22,映射请求方法,转换uri和请求参数的格式。s221,获得了统一资源标识符(uri)后,因为服务器的各种资源都对应一个特定的uri,要获取某个资源时,只需要访问它的uri就可以,因此uri就成了每一个资源的属性,并且该属性与资源是一一对应的,如果要将uri转换为rediskey,则需要服务器从uri中提取有效的path后转换为rediskey。在redis数据中是使用字符“:”将key与value进行分隔,而uri中path的分隔符是用“/”,因此只要进行分隔符的替换,将替换后的path字符串作为rediskey,将所述path中的字符“/”替换为字符“:”,即完成对uri的格式的转换。s222,将http请求参数转换到redisvalue的步骤流程图如图3a所示,包括以下具体步骤:步骤s2221:判断http请求的方法类型是否为httpget请求,如果是httpget请求则需要进一步判断查询字符串中是否包含特定字符段,比如采用哈希(hash)数据结构时的特定字符段为“q”字符段;如果包含所述特定字符段,则将所述特定字符段按照分隔符分解为多个子字符串,并将这些子字符串作为redis命令的field参数,从而得到对应的属性值,如果不包含所述特定字符段,则结束操作流程;如果不是httpget请求则进入下一步进行httppost请求的判断;步骤s2222:判断http请求的方法类型是否为httppost请求,如果是httppost请求则需要进一步判断是否包含json格式的参数数据,如果包含json格式的数据则序列化json数据的每个属性,并进一步转化为key-value的数据格式作为redis命令的filed参数,这里的序列化指的是,把对象转换为字节序列的过程称为对象的序列化。而把字节序列恢复为对象的过程称为对象的反序列化,需要说明的是,这里的序列化也可以采用二进制或者其他格式,根据实际情况需要而定。如果不是httppost请求则进入下一步进行httpput请求的判断;步骤s2223:判断http请求的方法类型是否为httpput请求,如果是httpput请求则需要进一步判断是否包含json格式的参数数据,如果包含json格式的数据则序列化json数据的每个属性,如果不是httpput请求则进入下一步进行httpdelete请求的判断;步骤s2224:判断http请求的方法类型是否为httpdelete请求,如果是则结束操作流程;如果不是则进入下一步进行请求无效的判断并结束操作流程。在本实施例中,如果有返回数据请求的时候,则返回redis数据的方法还包括如下步骤:判断redis操作是否有返回数据,如果有返回数据则进入下一步,如果没有返回数据则继续等待下一个redis数据命令;判断redis数据转换格式是否完成反序列化;如果完成反序列化则将转换后的格式数据发送web客户端,并等待下一条redis数据命令;如果没有完成反序列化则继续进行反序列化到最后一个字段,并结束反序列化操作等待下一条redis数据命令。需要说明的是,序列化(serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。s223,http请求方法映射到redis命令的步骤流程图如图3b所示,具体包括以下步骤:步骤s2231:所述服务器判断http请求的方法类型是否为httpget请求,如果是httpget请求则需要进一步判断http请求中是否包含请求参数,如果包含所述请求参数则映射为redis中的get命令,如果不包含所述请求参数则映射为redis中的getall命令结束操作流程;如果不是httpget请求则进入下一步进行httppost请求的方法的判断;步骤s2232:判断http请求的方法类型是否为httppost请求,如果是httppost请求则映射为redis中的set命令;如果不是httppost请求则进入下一步进行httpput请求的判断;步骤s2233:判断http请求的方法类型是否为httpput请求,如果是httpput请求则映射为redis中的set命令;如果不是httpput请求则进入下一步进行httpdelete请求的判断;步骤s2234:判断http请求的方法类型是否为httpdelete请求,如果是httpdelete请求则映射为redis中的delete命令;如果不是则判断为无效的请求并结束判断。s23,结构化所述转换格式后的属性和参数,具体来说,根据转换格式后的uri和http请求参数建立一一对应的键值对(key-value),需要说明的是,这里所说的转换格式是将http请求中的uri的path中分隔符“/”替换为“:”,将参数进行分解或者序列化为字符串。例如,当采用哈希(hash)数据结构进行转换时,redishash数据结构的value也是一个key-value数据结构,hashkey也被称为field,hash数据结构相关操作的一般格式是:commandkey[field][value]。其中,command是redis的命令,key是rediskey,field是hash数据结构的key,value是hash数据结构的value。通过替换uri中的分隔符,并以转换格式后的uri字符串作为redishash数据结构的key(或者称为键);以及以字符串化或者序列化后所得的请求参数,作为redis命令的filed参数,实现了将http请求中所包含的数据转换为redishash的键值格式,即key-value格式。而映射http请求的方法为redis的操作命令,同时实现对结构化后的键值关系的数据结构进行操作,比如创建,创建、查询、修改、删除等。下面再给出几个具体描述创建、查询、修改、删除用户信息的例子,在本实施例当中,采用基于restfulapi对redishash数据库进行数据交互的操作。创建用户信息如图4所示,http方法为post命令,映射的哈希(hash)类型命令为hmset;假设uri为http://localhost:80/users/1,转换成rediskey为user:1;请求参数为:body:{“id”:1,“name”:“abcd”,“password”:“1234”,“age”:20,“image”:{“src”:“abc.png”,“hsize”:10,“vsize”:10}},转换为redisvelue如下表所示:hashfieldhashvalueid1name“abcd”password“1234”age20image{“src”:“abc.png”,“hsize”:10,“vsize”:10}查询用户信息如图5所示,http方法为get命令,映射的哈希(hash)类型命令为hmget;假设uri为http://localhost:80/users/1,转换成rediskey为user:1;请求参数为:query:q=“nameage”,转换为hashfield:[“name”,“age”],进行redis操作,从redis中查redisvelue如下表所示:hashfieldhashvaluename“abcd”age20再经过服务器的反序列化得到response数据:body:{“name”:“abcd”,“age”:20}。修改用户信息如图6所示,http方法为put命令,映射的哈希(hash)类型命令为hmset;假设uri为http://localhost:80/users/1,转换成rediskey为user:1;请求参数为:body:{“password”:“5678”},转换为redisvelue如下表所示:hashfieldhashvaluepassword“5678”删除用户信息如图7所示,http方法为delete命令,映射的哈希(hash)类型命令为del;假设uri为http://localhost:80/users/1,转换成rediskey为user:1。通过采用前述的方法,在redis数据库中也能存储json格式这样复杂结构的服务器资源数据,有效提升了不同数据格式的数据库之间的数据转换、传输效率和存储能力。当前第1页12