数据存储方法、数据查询方法、装置、设备及存储介质与流程

文档序号:18475377发布日期:2019-08-20 20:58阅读:177来源:国知局
数据存储方法、数据查询方法、装置、设备及存储介质与流程

本发明涉及云存储领域,尤其涉及一种数据存储方法、数据查询方法、装置、计算机设备及存储介质。



背景技术:

随着计算机技术的日益发展,各种类型的数据库随之不断发展。目前比较常见的数据库主要包括有关系型数据库和非关系型数据库。不同类型的数据库具有不同的优势,虽然非关系数据库因具有灵活的可扩展性,且允许创建许多不同类型的非结构化的或任意格式的字段等优势,越来越受到开发者的欢迎,但也由于技术的不成熟,存在事务处理能力弱、没有完整性约束,且对于复杂业务场景支持较差等缺陷。因此很多技术开发者在处理数据时依旧会选择传统的关系型数据库。传统的关系型数据库具有查询灵活、容易保持数据的一致性的优点,但因存在扩展字段麻烦的缺陷,在对经常变化的数据进行存储时会出现存储效率低的问题,给技术开发人员的使用带来了极大的不便。



技术实现要素:

本发明实施例提供一种数据存储方法、装置、计算机设备及存储介质,以解决关系型数据库中数据存储效率低的问题。

本发明实施例提供一种数据查询方法、装置、计算机设备及存储介质,以解决关系型数据库中数据查询结果不准确的问题。

一种数据存储方法,包括:

获取数据存储请求,所述数据存储请求包括数据标识;

根据所述数据标识获取待存储数据;

对所述待存储数据进行序列化处理,得到序列化json字符串,所述序列化json字符串包括n个子json字符串,n为正整数;

将每一所述子json字符串与目标数据表中预设的固定字段进行一一匹配;

将与所述固定字段匹配成功的所述子json字符串写入所述固定字段对应的列表区域中;

将与所述固定字段匹配失败的所述子json字符串写入所述目标数据表中的自定义字段对应的列表区域中。

一种数据查询方法,包括:

获取数据查询请求,所述数据查询请求包括查询信息;

根据所述查询信息在目标数据表中的固定字段对应的列表区域进行查询,获取第一查询数据;

若所述第一查询数据为空,则对所述目标数据表中的自定义字段对应的列表区域中的初始json字符串进行反序列化处理,得到初始对象,其中,所述初始json字符串是采用上述数据存储方法所得的;

根据所述查询信息对所述初始对象进行查询,获取第二查询数据;

若所述第二查询信息为有效数据,则从所述初始对象中获取初始数据。

一种数据存储装置,包括:

数据存储请求获取模块,用于获取数据存储请求,所述数据存储请求包括数据标识;

待存储数据获取模块,用于根据所述数据标识获取待存储数据;

第一序列化处理模块,用于对所述待存储数据进行序列化处理,得到序列化json字符串,所述序列化json字符串包括n个子json字符串,n为正整数;

匹配模块,用于将每一所述子json字符串与目标数据表中预设的固定字段进行一一匹配;

第一写入模块,用于将与所述固定字段匹配成功的所述子json字符串写入所述固定字段对应的列表区域中;

第二写入模块,用于将与所述固定字段匹配失败的所述子json字符串写入所述目标数据表中的自定义字段对应的列表区域中。

一种数据查询装置,包括:

数据查询请求获取模块,用于获取数据查询请求,所述数据查询请求包括查询信息;

第一查询模块,用于根据所述查询信息在目标数据表中的固定字段对应的列表区域进行查询,获取第一查询数据;

反序列化处理模块,用于在所述第一查询数据为空时,对所述目标数据表中的自定义字段对应的列表区域中的初始json字符串进行反序列化处理,得到初始对象,其中,所述初始json字符串是采用上述数据存储方法所得到的;

第二查询模块,用于根据所述查询信息对所述初始对象进行查询,获取第二查询数据;

初始数据获取模块,用于在所述第二查询数据为有效数据时,从所述初始对象中获取初始数据。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述数据存储方法,或者所述处理器执行所述计算机程序时实现上述数据查询方法。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述数据存储方法,或者所述计算机程序被处理器执行时实现上述数据查询方法。

上述数据存储方法、装置、计算机设备及存储介质,通过获取数据存储请求,数据存储请求包括数据标识;然后根据数据标识获取待存储数据;对待存储数据进行序列化处理,得到序列化json字符串;再将每一子json字符串与目标数据表中预设的固定字段进行一一匹配;最后将与固定字段匹配成功的子json字符串写入固定字段对应的列表区域中;将与固定字段匹配失败的子json字符串写入目标数据表中的自定义字段对应的列表区域中;通过对经常变化的数据进行序列化处理,然后将序列化处理后的json字符串写入目标数据表中的自定义字段对应的列表区域中,从而提高了关系型数据库中数据存储的效率。

上述数据查询方法、装置、计算机设备及存储介质,通过获取数据查询请求,数据查询请求包括查询信息;然后根据查询信息在目标数据表中的固定字段对应的列表区域进行查询,获取第一查询数据;若第一查询数据为空,则对目标数据表中的自定义字段对应的列表区域中的初始json字符串进行反序列化处理,得到初始对象;最后根据查询信息对初始对象进行查询,获取第二查询数据;若第二查询信息为有效数据,则从初始对象中获取初始数据;在对定义字段对应的列表区域中的数据进行查询时,先将初始json字符串进行反序列化处理得到初始对象后再查询,避免了直接对初始json字符串进行查询时,出现查询结果不准确的问题,从而提高了数据查询结果的准确性。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例中数据存储方法或数据查询方法的一应用环境示意图;

图2是本发明一实施例中数据存储方法的一示例图;

图3是本发明一实施例中数据存储方法的另一示例图;

图4是本发明一实施例中数据存储方法的另一示例图;

图5是本发明一实施例中数据存储方法的另一示例图;

图6是本发明一实施例中数据存储装置的一原理框图;

图7是本发明一实施例中数据查询方法的一示例图;

图8是本发明一实施例中数据查询方法的另一示例图;

图9是本发明一实施例中数据查询装置的一原理框图;

图10是本发明一实施例中计算机设备的一示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供的数据存储方法,该数据存储方法可应用如图1所示的应用环境中。具体地,该数据存储方法应用在数据存储系统中,该数据存储系统包括如图1所示的客户端和服务端,客户端与服务端通过网络进行通信,用于解决关系型数据库中数据存储的效率低的问题。其中,客户端又称为用户端,是指与服务端相对应,为客户提供本地服务的程序。客户端可安装在但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备上。服务端可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一实施例中,如图2所示,提供一种数据存储方法,以该方法应用在图1中的服务端为例进行说明,包括如下步骤:

s10:获取数据存储请求,数据存储请求包括数据标识。

其中,数据存储请求为对特定的数据进行存储时的触发请求。数据存储请求包括数据标识。具体地,数据标识指用来区分不同数据之间的一种标识,不同数据所对应的数据标识都是唯一确定的。数据标识可以由数字、字母、文字或者符号中的至少一项组成。在一具体实施方式中,当用户通过客户端执行获取数据的操作,触发数据存储请求后,服务端即可从客户端获取到数据存储请求。

s20:根据数据标识获取待存储数据。

其中,待存储数据指待进行存储的数据。在本实施例中,待存储数据是一种对象,该对象可以为自义定类的对象,也可以为非自定义类的对象。自义定类的对象可以是根据实际需要定义的任意类。非自定义类的对象可以是引用的源代码等已定义的类。具体地,根据数据标识获取待存储数据是指根据数据标识从数据库或客户端的数据文本中获取待存储数据的过程。优选地,为了方便根据数据标识获取待存储数据,可预先将待存储数据单独存储在客户端的一目标文本中,并赋予该目标文本唯一确定的标识号作为该待存储数据的数据标识,其中,目标文本指写入了待存储数据的文本。当获取到数据存储请求所携带的数据标识时,即可直接根据该数据标识从客户端获取到目标文本,然后从该目标文本中获取待存储数据。

s30:对待存储数据进行序列化处理,得到序列化json字符串,序列化json字符串包括n个子json字符串,n为正整数。

其中,序列化json字符串指待存储数据序列化处理后所得的字符串。在本实施例中,序列化json字符串是以键值对(key-value)的形式存在的,key指键名,value指键值。序列化json字符串包括n个子json字符串,n为正整数,即每一子json字符串都包括一键值对(key-value)。

由于待存储数据是一种对象,因此可进行序列化处理的待存储数据至少包含一种属性。可以理解地,每一属性都有对应的属性名和属性值。其中,对象序列化处理是指将对象转换为字节序列的过程。具体地,对待存储数据进行序列化处理可通过使用一个输出流(如fileoutputstream)来构造一个输出流对象objectoutputstream,然后使用该输出流对象objectoutputstream中的writeobject方法对待存储数据中所包含的各属性值和对应的属性名进行序列化处理,得到序列化json字符串。

示例性地,若获取的待存储数据为person类中的一个对象person1,person类的定义如下:

若对于person类的一个对象person1,其属性名name对应的属性值为ben,属性名telephone对应的属性值为88888888,则可通过使用一个输出流fileoutputstream来构造一个对象流objectoutputstream对象,然后使用objectoutputstream对象中的writeobject方法对对象person1进行序列化处理后,得到序列化json字符串。该序列化json字符串包括2个子json字符串分别为:key=name、value=ben和key=telephone、value=88888888。

s40:将每一子json字符串与目标数据表中预设的固定字段进行一一匹配。

其中,目标数据表指预先设定的、用来存储数据的数据表。在本实施方式中,目标数据表为关系型数据表,且该目标数据表中预先包含有若干固定字段。其中,固定字段指用来存储离散数据段的结构化字段。具体地,由于每一子json字符串都包含键值和对应的键名,因此将每一子json字符串与目标数据表中预设的固定字段进行一一匹配是指将每一子json字符中的键名与目标数据表中预设的固定字段进行一一匹配。可选地,可采用正则匹配法将每一子json字符中的键名与目标数据表中存储的固定字段进行一一匹配,也可以使用c++中的字符比较函数,将每一子json字符中的键名与目标数据表中存储的固定字段进行一一匹配,还可以采用字符串匹配法将每一子json字符中的键名与目标数据表中存储的固定字段进行一一匹配;若子json字符中的键名与目标数据表中存储的任一固定字段相匹配,则表示该子json字符中与目标数据表中存储的固定字段匹配成功;若子json字符中的键名与目标数据表中存储的所有固定字段都不匹配,则表示该子json字符中与目标数据表中存储的固定字段匹配失败。

s50:将与固定字段匹配成功的子json字符串写入固定字段对应的列表区域中。

在步骤s40将每一子json字符串与目标数据表中预设的固定字段进行一一匹配后,将与固定字段匹配成功的子json字符串写入固定字段对应的列表区域中。可选地,根据步骤40得到的与固定字段匹配成功的子json字符串可以是一个字符串,也可以是复数个字符串。

具体地,由于固定字段是已预先配置好、并存储在目标数据表中,即每一固定字段都包含有对应的固定字段名。因此将与固定字段匹配成功的子json字符串写入固定字段对应的列表区域中是指:将与固定字段匹配成功的每一子json字符串中的键值写入到对应匹配成功的固定字段对应的列表区域中。另外地,若得到的与固定字段匹配成功的的子json字符串为复数个字符串,则需将该复数个字符串写入到固定字段对应的列表区域的同一行区域中。

可选地,将与固定字段匹配成功的子json字符串写入固定字段对应的列表区域中可采用oracleinsert插入语句或plsql数据导入方法等实现,用户可根据实际情况自定义选择。

另外地,为了便于区分固定字段对应的列表区域中的不同类型的数据,在将与固定字段匹配成功的子json字符串写入固定字段对应的列表区域中后,再赋予该子json字符串所在的行区域对应的行标识。

s60:将与固定字段匹配失败的子json字符串写入目标数据表中的自定义字段对应的列表区域中。

在步骤s40将每一子json字符串与目标数据表中预设的固定字段进行一一匹配后,将与固定字段匹配失败的子json字符串写入目标数据表中的自定义字段对应的列表区域中。可选地,根据步骤40得到的与固定字段匹配失败的的子json字符串可以是一个字符串,也可以是复数个字符串。

其中,自定义字段是指预先设定的、用来存储经常发生变化的数据的字段。可选地,自定义字段可以为mysql字段、clob字段、blob字段等任意一种字段。优选地,由于clob字段具体可以存储字符串类型的数据,且数据长度无限制的特征,在本实施例中将选取clob字段作为自定义字段。在该步骤中,将与固定字段匹配失败的子json字符串写入目标数据表中的自定义字段对应的列表区域中是指:将与固定字段匹配失败的每一子json字符串中的键值和对应的键名写入目标数据表中的自定义字段对应的列表区域中。另外地,若得到的与固定字段匹配失败的的子json字符串为复数个字符串,则需将该复数个字符串写入到目标数据表中的自定义字段对应的列表区域的同一行区域中。

可选地,可采用oracleinsert插入语句或plsql数据导入方法将与固定字段匹配失败的子json字符串写入目标数据表中的自定义字段对应的列表区域中。

在本实施例中,通过获取数据存储请求,数据存储请求包括数据标识,根据数据标识获取待存储数据;然后对待存储数据进行序列化处理,得到序列化json字符串,序列化json字符串包括n个子json字符串,n为正整数;再将每一子json字符串与目标数据表中预设的固定字段进行一一匹配;最后将与固定字段匹配成功的子json字符串写入固定字段对应的列表区域中,将与固定字段匹配失败的子json字符串写入目标数据表中的自定义字段对应的列表区域中;通过将关系型数据库中经常变化的数据写入自定义字段对应的列表区域中,从而进一步提高了关系型数据库的数据存储效率。

在一实施例中,如图3所示,将与固定字段匹配失败的子json字符串写入目标数据表中的自定义字段对应的列表区域中,具体包括如下步骤:

s601:将写入与固定字段匹配成功的子json字符串的区域,作为初始行区域,初始行区域包括初始行标识。

其中,初始行区域指在固定字段对应的列表区域中,写入了与固定字段匹配成功的子json字符串中的键值所在的区域。在一具体实施方式中,固定字段对应的列表区域包括若干行区域,且每一行区域都预先设定了对应的行标识。其中,行标识指为了区分目标数据表的列表区域中的不同行的一种标识。可选地,行标识可以由阿拉伯数字、大写字母或小写字母中的任意一种表示。初始行标识指初始行区域所对应的行标识。可选地,可根据初始行标识,对固定字段对应的列表区域进行定位,将写入与固定字段匹配成功的子json字符串的区域,作为初始行区域。

s602:根据初始行标识,对目标数据表中的自定义字段对应的列表区域进行定位,获取目标行区域。

其中,目标行区域指在自定义字段对应的列表区域中,需写入与固定字段匹配失败的子json字符串中的键值和对应的键名的区域。在一具体实施方式中,自定义字段对应的列表区域包括若干行区域,且每一行区域都预先设定了对应的行标识。具体地,根据初始行标识,对目标数据表中的自定义字段对应的列表区域进行定位包括:将获取的初始行标识与自定义字段对应的每一行区域的行标识进行匹配,然后将与该初始行标识匹配成功的行区域,作为目标行区域。可以理解地,在目标数据表中,目标行区域与初始行区域的行标识相同。

s603:将与固定字段匹配失败的子json字符串写入目标行区域中。

具体地,在根据s602确定了自定义字段对应的列表区域中的目标行区域之后,将与固定字段匹配失败的每一子json字符串中的键值和对应的键名写入该目标行区域中。可选地,可采用oracleinsert插入语句或plsql数据导入方法将与固定字段匹配失败的子json字符串写入目标行区域中。

本实施例中,通过将写入与固定字段匹配成功的子json字符串的区域,作为初始行区域,初始行区域包括初始行标识;然后根据初始行标识,对目标数据表中的自定义字段对应的列表区域进行定位,获取目标行区域;最后将与固定字段匹配失败的子json字符串写入目标行区域中;通过行标识对写入与固定字段匹配失败的子json字符串的行区域进行定位,实现了准确地将每一子json字符串写入自定义字段对应的的列表区域中,保证了同一待存储数据进行数据存储的关联性。

在一实施例中,如图4所示,对待存储数据进行序列化处理,得到序列化json字符串,具体包括如下步骤:

s401:获取待存储数据的属性信息,属性信息包括属性值和对应的属性名。

其中,待存储数据的属性信息指待存储数据所包含的所有属性的相关信息,属性对应的值即为属性值,属性的名称即属性名。可以理解地,该待存储数据至少包括一个属性。具体地,待存储数据的属性值的类型可以包括基本类型和非基本类型。基本类型包括整型、字符型、浮点型或字符串型等程序设计语言支持的基本类型。非基本类型为任意自定类或非自定义类的类型。

s402:判断每一属性值的类型是否为基本类型,对类型不为基本类型的属性值进行循环分解,得到类型为基本类型的子属性值。

判断每一属性值的类型是否为基本类型可根据每一属性值前的标识符来判断。例如:若一属性值前的标识符为int,则表示该属性值为基本类型中的整型。具体地,可预先设置一基本类型数据表,该基本类型数据表中包含有所有基本类型的标识符,然后将每一属性值前的标识符与该基本类型数据表中的所有标识符进行一一匹配,若匹配成功则表示该属性值为基本类型,若匹配失败则表示该属性值为非基本类型。优选地,还可直接采用typeof运算符、instanceof操作符、object.prototype.tostring方法、constructor属性或ducktype等任意一种方法判断该属性值的类型是否为基本类型。

其中,子属性值指非基本类型的属性值进行循环分解后所得的数值。子属性值包括分解后的属性值和对应的子属性名。具体地,在对每一属性值的类型进行判断后,获取类型为非基本类型的属性值,并对该类型为非基本类型的属性值进行循环分解。可选地,可采用pandas工具对类型为非基本类型的属性值进行分解,得到基本类型的子属性值。其中,pandas工具是基于numpy的一种数据分析工具,pandas工具纳入了大量库和一些标准的数据模型,能快速便捷地处理数据的函数和方法。

示例性地,若获取到person类中的一个对象person1,该person类的定义如下:publicclasspersonimplementsserializable{

addressaddress;}

该对象person1中包含一属性,且该属性的属性名为address以及对应的属性值为address1,经判断得到该属性值address1为address类的对象,即属性值address1为非基本类型,因此需对address1进行循环分解。在对address1进行循环分解后,得到address1的子属性值包括:子属性值510000和对应的子属性名postcode,子属性值510000的类型为int。由于子属性值510000的类型为基本类型,因此不需再继续进行分解。

另外地,在对每一属性值的类型进行判断后,若该属性值的类型为基本类型,则不需对该类型为基本类型的属性值进行循环分解。

s403:对每一基本类型的子属性值和对应的属性名,以及每一类型为基本类型的属性值和对应的属性名进行序列化处理,得到目标键值和对应的目标键名。

其中,目标键值指对基本类型的属性值进行序列化处理后所得的键值。目标键名指对基本类型的属性名进行序列化处理后所得的键名。具体地,首先使用一个输出流(如fileoutputstream)来构造一个对象流objectoutputstream对象,然后使用objectoutputstream对象中的writeobject方法将根据步骤s402得到的每一基本类型的子属性值和对应的属性名,以及每一类型为基本类型的属性值和对应的属性名进行序列化处理,即可得到目标键值和对应的目标键名。例如,对上述步骤s402循环分解后的address1的子属性值进行序列化处理,得到的目标键值和对应的目标键名为:value=51000、key=address.postcode。

s404:获取预设的连接方式信息,根据连接方式信息连接每一目标键值和对应的目标键名,得到序列化json字符串。

其中,连接方式信息指预先设定的、将每一目标键值和对应的目标键名进行整合的信息。具体地,获取预设的连接方式信息可以从其他存储设备获取,也可以从服务器的数据库中获取。可选地,连接方式信息可以为字符连接,即通过/、*、空格等字符连接得到的所有键值对,也可以为序列化连接,即将得到的所有目标键值和对应的目标键名对再进行序列化,以连接所有目标键值和对应的目标键名,得到序列化json字符串。

具体地,根据连接方式信息连接每一目标键值和对应的目标键名是指根据连接方式信息,将获取的每一目标键值和对应的目标键名进行整合,得到序列化json字符串。例如:若获取的连接方式信息为用字符*连接,和得到3个目标键值和对应的目标键名分别为:key=name、value=ben和value=51000key=address.postcode,则根据连接方式信息连接每一目标键值和对应的目标键名,得到的序列化json字符串为:key=name*value=ben*value=51000*key=address.postcode。

在本实施例中,通过获取待存储数据的属性信息,属性信息包括属性值和对应的属性名;然后判断每一属性值的类型是否为基本类型,对类型不为基本类型的属性值进行循环分解,得到类型为基本类型的子属性值;再对每一基本类型的子属性值和对应的属性名,以及每一类型为基本类型的属性值和对应的属性名进行序列化处理,得到目标键值和对应的目标键名;最后获取预设的连接方式信息,并根据连接方式信息连接每一目标键值和对应的目标键名,得到序列化json字符串;通过对待存储数据所包含的每一属性值的类型进行判断,然后对非基本类型的属性值先循环分解,再统一进行序列化处理,从而保证了序列化处理后的序列化json字符串的准确性。

在一实施例中,如图5所示,在根据数据标识获取待存储数据之后,并且在对待存储数据进行序列化处理之前,数据存储方法还包括:

s21:判断待存储数据的属性是否为空。

由于待处理存储是一种对象,对象又包括有属性的对象和无属性的对象。在本实施例中,对待存储数据进行序列化处理的实质是对待存储数据所包含的属性进行序列化处理。因此,在对待存储数据进行序列化之前,需判断该待存储数据是否具有属性,即判断该待存储数据的属性是否为空。可选地,可采用js中的点方括号方法、in运算符方法或hasownproperty()方法判断该待存储数据的属性是否为空。

s22:若待存储数据的属性为空,则向客户端发送数据错误信息。

其中,数据错误信息指用来提示用户该待存储数据不具有任何属性的信息。具体地,若根据步骤s21判断得到该待存储数据的属性为空,即该待存储数据不具有任何属性,则向客户端发送数据错误信息。

s23:重新获取客户端根据数据错误信息返回的数据存储请求。

具体地,在向客户端发送数据错误信息后,用户可根据获取的数据错误信息,重新获取待存储数据,即通过客户端重新向服务端发送数据存储请求,服务端重新获取客户端根据数据错误信息返回的数据存储请求。

在本实施例中,通过判断待存储数据的属性是否为空;若待存储数据的属性为空,则向客户端发送数据错误信息,并重新获取客户端根据数据错误信息返回的数据理请求;保证了待存储数据的有效性,进一步提高了后续对待存储数据进行序列化处理的效率。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

在一实施例中,提供一种数据存储装置,该数据存储装置与上述实施例中数据存储方法一一对应。如图6所示,该数据存储装置包括数据存储请求获取模块模块10、待存储数据获取模模块20、序列化处理模块模块30、匹配模块40、第一写入模块50和第二写入模块60。各功能模块详细说明如下:

数据存储请求获取模块10,用于获取数据存储请求,数据存储请求包括数据标识;

待存储数据获取模块20,用于根据数据标识获取待存储数据;

第一序列化处理模块30,用于对待存储数据进行序列化处理,得到序列化json字符串,序列化json字符串包括n个子json字符串,n为正整数;

匹配模块40,用于将每一子json字符串与目标数据表中预设的固定字段进行一一匹配;

第一写入模块50,用于将与固定字段匹配成功的子json字符串写入固定字段对应的列表区域中;

第二写入模块60,用于将与固定字段匹配失败的子json字符串写入目标数据表中的自定义字段对应的列表区域中。

优选地,第二写入模块60,包括:

初始行区域确定单元,用于将写入与固定字段匹配成功的子json字符串的区域,作为初始行区域,初始行区域包括初始行标识;

定位单元,用于根据初始行标识,对目标数据表中的自定义字段对应的列表区域进行定位,获取目标行区域;

写入单元,用于将与固定字段匹配失败的子json字符串写入目标行区域中。

优选地,第一序列化处理模块30,包括:

属性信息获取单元,用于获取待存储数据的属性信息,属性信息包括属性值和对应的属性名;

判断单元,用于判断每一属性值的类型是否为基本类型,对类型不为基本类型的属性值进行循环分解,得到类型为基本类型的子属性值;

序列化处理单元,用于对每一基本类型的子属性值和对应的属性名,以及每一类型为基本类型的属性值和对应的属性名进行序列化处理,得到目标键值和对应的目标键名;

连接单元,用于获取预设的连接方式信息,根据连接方式信息连接每一目标键值和对应的目标键名,得到序列化json字符串。

优选地,数据存储装置,还包括:

判断模块,用于判断待存储数据的属性是否为空;

发送模块,用于在待存储数据的属性为空时,向客户端发送数据错误信息;

数据存储请求重新获取模块,用于重新获取客户端根据数据错误信息返回的数据存储请求。

关于数据存储装置的具体限定可以参见上文中对于数据存储方法的限定,在此不再赘述。上述数据存储装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

本发明实施例还提供一种数据查询方法,该数据查询方法可应用如图1所示的应用环境中。具体地,该数据查询方法应用在数据查询系统中,该数据查询系统包括如图1所示的客户端和服务端,客户端与服务端通过网络进行通信,用于解决关系型数据库数据查询结果不准确的问题。其中,客户端又称为用户端,是指与服务端相对应,为客户提供本地服务的程序。客户端可安装在但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备上。服务端可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一实施例中,如图7所示,提供一种数据查询方法,以该方法应用在图1中的服务端为例进行说明,包括如下步骤:

s100:获取数据查询请求,数据查询请求包括查询信息。

其中,数据查询请求指对数据进行查询时的触发请求。数据查询请求包括查询信息。查询信息指用户在客户端页面的查询输入框中输入的查询信息。可选地,查询信息可以为一关键词或关键字,关键词或关键字的类型可以是英文、汉字或拼音等。具体地,当用户在客户端执行数据查询操作,触发数据查询请求后,服务端即可从客户端获取该数据的数据查询请求。例如:在一个应用场景中,该方法的运行基于用户智能手机或电脑页面上,该页面设有一查询输入框,当用户在该查询输入框输入查询信息,生成数据查询请求后,客户端将该数据查询请求发送到服务端,服务端即可从客户端获取对应的数据查询请求。

s110:根据查询信息在目标数据表中的固定字段对应的列表区域进行查询,获取第一查询数据。

其中,第一查询数据指根据查询信息,在目标数据表中的固定字段对应的列表区域进行查询后所得的数据。具体地,由于目标数据表中的固定字段对应的列表区域中保存的数据是可直接根据用户在客户端页面输入的查询信息进行数据查询的。因此,当获取到客户端发送的数据查询请求时,首先根据该数据查询请求所携带的查询信息,在目标数据表中的固定字段对应的列表区域进行查询,得到第一查询数据。具体地,根据查询信息在目标数据表中的固定字段对应的列表区域进行查询包括:获取查询信息,然后将该查询信息与固定字段对应的列表区域中所保存的数据进行一一匹配;若匹配成功,则表示该数据存储在目标数据表中的固定字段对应的列表区域中,得到的第一查询数据为有效数据;若匹配失败,则表示该数据不在目标数据表中的固定字段对应的列表区域中,得到的第一查询数据为空。

s120:若第一查询数据为空,则对目标数据表中的自定义字段对应的列表区域中的初始json字符串进行反序列化处理,得到初始对象,其中,初始json字符串是采用数据存储方法所得到的。

其中,初始json字符串指目标数据表中的自定义字段对应的列表区域中所包含的所有json字符串。在本步骤中,初始json字符是采用上述实施例中的数据存储方法所得到的。初始对象指对初始json字符串进行反序列化处理后得的数据。具体地,由于自定义字段对应的列表区域中存储的数据是已进行序列化后的json字符串,因此,若根据上述步骤s110得到第一查询数据为空,即无法根据查询信息,在目标数据表中的固定字段对应的列表区域查询到对应的数据,则需预先对目标数据表中的自定义字段对应的列表区域中的初始json字符串进行反序列化处理,得到初始对象。

其中,反序列化处理是指把字节序列化恢复成对象的过程。具体地,对目标数据表中的自定义字段对应的列表区域中的初始json字符串进行反序列化处理包括:获取初始json字符串,根据初始json字符串的连接方式信息,对该初始json字符串所包含的所有键值对进行拆分,得到该初始json字符串的若干属性值和对应的属性名;然后根据对象属性信息生成各属性值均为空的反序列化对象;再根据对象属性信息和得到的序列化后的属性值及对应的属性名称,给生成的反序列化对象的相应属性值赋值,得到原始对象。其中,对象属性信息可以是反序列化所涉及到的各对象所属类的定义、各对象包括的属性信息等,反序化涉及到的对象包括反序列化对象及其属性值或子属性值为非基本类型的对象。可选地,对初始json字符串进行反序列化处理可通过预先使用一个输入流(如fileinputstream)来构造一个输入流对象objectinputstream,然后使用该输入流对象objectinputstream中的readobject方法对初始json字符串进行反序列化处理,得到初始对象。

s130:根据查询信息对初始对象进行查询,获取第二查询数据。

其中,第二查询数据指根据查询信息对初始对象进行查询后所得的数据。具体地,由于进行反序列化处理后的初始对象包含有自定义字段中存储的所有数据信息。因此根据查询信息对初始对象进行查询可进一步保证查询结果的准确性。可选地,根据查询信息对初始对象进行查询可采用字符串匹配法,将该查询信息与初始对象所包含的所有属性信息进行一一匹配,也可采用正则匹配法,将该查询信息与初始对象所包含的所有属性信息进行一一匹配;若匹配成功,则表示该数据存储在目标数据表中的自定义字段对应的列表区域中,得到的第二查询数据为有效数据;若匹配失败,则表示该数据不在该目标数据表中,得到的第二查询数据为空。

s140:若第二查询数据为有效数据,则从初始对象中获取初始数据。

其中,初始数据指用户需在目标数据表中查询的数据。若根据步骤s130获取的第二查询数据为有效数据,即根据查询信息,可在初始对象中查询到对应的数据,则从该初始对象中获取对应的初始数据。

在本实施例中,获取数据查询请求,数据查询请求包括查询信息;然后根据查询信息在目标数据表中的固定字段对应的列表区域进行查询,获取第一查询数据;若第一查询数据为空,则对目标数据表中的自定义字段对应的列表区域中的初始json字符串进行反序列化处理,得到初始对象,其中,初始json字符串是采用数据存储方法所得的;最后根据查询信息对初始对象进行查询,获取第二查询数据;若第二查询信息为有效数据,则从初始对象中获取初始数据;在对定义字段对应的列表区域中的数据进行查询时,先将初始json字符串进行反序列化处理得到初始对象后再查询,避免了直接对初始json字符串进行查询时,因初始json字符串中的键名不同,或需查询的初始数据不包含在初始json字符串中,而出现查询结果不准确的问题,进一步提高了数据查询结果的准确性。

在一实施例中,如图8所示,在从初始对象中获取查询数据之后,数据查询方法还包括:

s150:获取数据修改请求,数据修改请求包括修改信息。

其中,数据修改请求指对初始数据进行修改时的触发请求。数据修改请求包括修改信息。修改信息指对初始数据进行修改的相关信息,修改信息包括位置信息和目标数据。其中,位置信息指需进行修改的具体数据位置。目标数据指修改后的数据。具体地,当用户对初始数据执行修改操作,触发数据修改请求后,服务端即可从客户端获取该数据修改请求。

s160:根据修改信息对初始数据进行修改,得到目标数据。

其中,目标数据指对初始数据进行修改后的数据。根据修改信息,对初始数据进行修改指根据修改信息将初始数据修改成目标数据的过程。具体地,根据修改信息对初始数据进行修改包括:首先根据数据修改请求所携带的位置信息,确定查询数据中需要修改的具体数据位置,然后根据该数据修改请求所携带的目标数据对初始数据进行修改,即可得到初始数据修改后的目标数据。可选地,可采用java语言或mybatis工具实现对查询数据的修改,得到目标数据。

s170:对目标数据进行序列化处理,得到目标json字符串。

具体地,对目标数据进行序列化处理的具体体过程和方法,与步骤s30对待处理数据进行序列化处理的过程和方法相同,此处不做冗余赘述。

s180:将目标json字符串写入到自定义字段对应的列表区域中。

具体地,将目标json字符串写入自定义字段对应的列表区域中的具体过程和方法,与步骤s40将与固定字段匹配失败的子json字符串写入自定义字段对应的列表区域中的过程和方法相同,此处不做冗余赘述。

本实施例中,通过获取数据修改请求,数据修改请求包括修改信息,然后根据修改信息对查询数据进行修改,得到目标数据;再对目标数据进行序列化处理,得到目标json字符串,最后将目标json字符串写入到自定义字段中,保证了数据修改的准确性。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

在一实施例中,提供一种数据查询装置,该数据查询装置与上述实施例中数据查询方法一一对应。如图9所示,该数据查询装置包括数据查询请求获取模块100、第一查询模块110、反序列化处理模块120、第二查询模块130和初始数据获取模块140。各功能模块详细说明如下:

数据查询请求获取模块100,用于获取数据查询请求,数据查询请求包括查询信息;

第一查询模块110,用于根据查询信息在目标数据表中的固定字段对应的列表区域进行查询,获取第一查询数据;

反序列化处理模块120,用于在第一查询数据为空时,对目标数据表中的自定义字段对应的列表区域中的初始json字符串进行反序列化处理,得到初始对象,其中,初始json字符串是采用上述数据存储方法所得到的;

第二查询模块130,用于根据查询信息对初始对象进行查询,获取第二查询数据;

初始数据获取模块140,用于在第二查询数据为有效数据时,从初始对象中获取初始数据。

优选地,数据查询装置,还包括:

数据修改请求获取模块,用于获取数据修改请求,数据修改请求包括修改信息;

修改模块,用于根据修改信息对初始数据进行修改,得到目标数据;

第二序列化处理模块,用于对目标数据进行序列化处理,得到目标json字符串;

第三写入模块,用于将目标json字符串写入自定义字段对应的列表区域中。

关于数据查询装置的具体限定可以参见上文中对于数据查询方法的限定,在此不再赘述。上述数据查询装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储上述实施例数据存储方法和数据查询方法中使用到的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据存储方法,或者。该计算机程序被处理器执行时以实现一种数据查询方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中数据存储方法,或者处理器执行计算机程序时实现上述实施例中数据查询方法。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中数据存储方法,或者处理器执行计算机程序时实现上述实施例中数据查询方法。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1