一种基于三维表结构的数据关联存取方法及应用与流程

文档序号:11519812阅读:280来源:国知局
一种基于三维表结构的数据关联存取方法及应用与流程
本发明涉及数据的存储读取技术,尤其涉及一种基于三维表结构的数据关联存取方法,并应用于面向农药、农产品、农药残留限量(maximumresiduelimit,mrl)标准数据的关联、存储和读取。
背景技术
:随着信息化社会的建设,大数据存储读取的问题也随之暴露出来。在现有的技术中,常常会使用关系型数据库来存储信息。当使用关系型数据库sql(结构化查询语言)查询大量数据的时候,结果表中数据量大,系统响应过慢,甚至会导致系统瘫痪宕机。使用多个数据库表存储不同类别数据时,需设计实现数据库表的关联操作。数据的存取速度从一定程度上影响系统的性能。使用hash映射法可以提高系统查询和插入数据效率,使系统的时间复杂度接近o(1)。所谓的hash,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的地址输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。也就是说,hash将预映射通过hash算法计算后映射到表中一个地址,可直接根据地址访问记录,可加快查找的速度。但是,现有hash映射方法将数据通过一次hash映射映射到存储空间中,当发生多次查询时,读取查询的速度越来越慢,查找效率越低。在现有的农药残留数据管理系统中,要存储农药残留限量标准(maximumresiduelimit,mrl)、农药、农产品等相关信息。mrl中的每一条限量值是指某种农药在某种农产品中的限量值,且需要根据政府颁布的新标准随时更新。对于mrl、农产品及农药信息表,是针对每张表进行关联操作,才能得到相应的信息;在对数据进行读取操作时,是通过读取磁盘上的数据传递给用户。但是,这样会存在一些问题,比如想要获取mrl和农产品之间的关联信息或存储关联信息时,就会比较困难;另一方面,磁盘的读取速度较慢,在数据量大的情况下,这个问题尤为突出。技术实现要素:本发明设计了一种基于三维表结构的数据关联存储与读取方法,解决了数据关联存取问题,提高了系统存取数据的效率;将本
发明内容应用于农药残留数据管理系统中,实现了对农药信息、农产品信息以及多个国家或地区农药残留最大限量mrl标准信息的关联存取和有效管理,极大提高了存取的速度,提高数据管理的效率。本发明的核心是:现有hash映射方法通过一次hash映射,将数据映射到存储空间中。本发明在hash映射方法基础上进行优化,设计了两层额外的存储空间,通过对三维表的映射,达到对数据的分层存储,对于经常操作的数据,存储到高级存储空间中,由此达到进一步提升速度的目的。本发明中,系统响应用户首次的查询请求,将查询请求拆分成数据库的多表关联操作,读取数据。设置两层存储空间用于存储查询结果,设计并构建三维表结构,定义用于统计三维表中数据重叠频次的阈值和hash映射函数,将查询的结果依次使用hash映射存储到低级存储空间中的三维表;统计各项重叠的频次,超过阈值的数据则使用hash再次映射到高级存储空间的三维表中。当用户发起第二次及之后的读取查询操作时,先到高级存储空间中的三维表中查询,若无数据或未查询完全则到低级存储空间中的三维表中查询,若再无数据或未查询完全则到常规存储空间中查询,同时运行hash映射存储过程,以此循环。将本
发明内容应用于农药残留数据管理系统中,实现了对农药信息、农产品信息以及多个国家或地区农药残留最大限量mrl标准信息多个关联表结构的有效管理,极大提高了存取的速度。本发明提供的技术方案是:一种基于三维表结构的数据关联存取方法,用于实现管理系统的高效数据存取访问操作;管理系统至少包括硬件系统(包括存储设备)、数据库和应用程序;所述存取方法针对存储设备额外设计两层的存储空间;用户发出的请求进行解析,通过对多个数据库表进行关联操作,设立三维表,用于多个表关联数据的显示和统计查询重叠的频次;使用hash函数和hash表计算得到地址作为下一次存储的地址;由此对实现查询读取或查询存储操作;所述查询读取操作是指查询时进行的读取操作;所述查询存储操作是指为后一次查询读取进行准备的预存储操作;当用户操作是第一次查询时,先进行读取查询,再进行查询的存储操作;当用户操作不是第一次查询时,根据之前的一次或多次查询时的预存储操作结果进行数据的读取查询,需要时(若当前存储空间中未完全包含本次要查询的数据)对当次查询数据进行预存储操作;所述存取方法包括如下步骤:1)在存储设备中除常规存储空间之外,申请两级存储空间,分别为低级存储空间和高级存储空间,用于存储hash表和使用hash函数计算映射的数据(低级存储空间、高级存储空间的数据需要分开存储);所述存储设备包括常规存储空间、低级存储空间和高级存储空间;2)设计并建立结构相同的两个三维表,分别称为正式三维表和临时三维表;三维表结构中,x轴为数据的各个属性,y轴逐行数据记录,z轴为查询结果存储次数;本发明中,创建的三维表结构可以:(1)统计用户多次查询数据的重叠部分;(2)对存储多次查询不相同的数据提供了可行性;其中,不相同的数据是指,用户输入的查询条件(sql)语句不同,导致查询出的结果数据也不同,体现在结果表中列属性不相同,这些多次查询的数据都有相同列(如一个或两个),其他列不同,这样的数据被称为关联数据。三维表结构可以对x、y轴两个方向进行拓展,如图2,三维表结构为存储关联数据提供了可行方案。3)定义用来计算数据映射地址的hash函数,将每一次查询数据的结果集中存储到临时三维表中,将临时三维表中的各个数据使用hash函数计算存储地址,并根据计算所得地址将正式三维表中的数据连同存有查询条件的hash表一同存储在低级存储空间中;所谓的hash表就是存储了获得正式三维表中的数据结果的查询条件与数据映射地址的表;其中,每一次查询数据是系统根据用户输入的条件,对常规存储空间中的数据库进行查询而得到的;临时三维表中是用来存储用户每次在常规存储空间查询得到的数据的,是用户多次查询的数据集中取并集的结果;因为用户多次查询的结果中,可能有重复查询的数据,所以设计使用三维表存储。再设置用于统计三维表中数据重叠频次的频次阈值,根据频次阈值,将低级存储空间中的数据经hash映射后写入高级存储空间中。4)用户根据需求自定义用于统计低级存储空间三维表中数据重叠频次的阈值,将超过阈值的低级存储空间三维表中的部分数据按照步骤3)中定义的hash函数再次计算地址,并根据计算所得地址将上述存有部分数据的正式三维表连同步骤4)中所述的新hash表存储到高级存储空间中(这里注意区分,这个是存储到高级存储空间中的hash表,与步骤3)中存储低级存储空间中的hash表不同,不是一个表);存储过程结束;5)设置定时清空高、低级存储空间数据的生命周期变量;系统在运行时,当时间达到生命周期变量时,系统自动按照高、低的顺序逐步清空高低存储空间中存储的hash表和正式三维表数据。该操作保证了存储空间不会过大而溢出。6)查询读取时,先根据高级存储空间的hash表查找,若查找结果集未包含或未完全包含应有的数据集,则再根据低级存储空间的hash表进行查找;若仍查找不到,再到常规存储空间中查找,同时运行步骤3)~4)的hash映射存储过程。当hash表中条件和该查询条件(例如sql语句)不是完全一致时,说明查找结果集未包含或未完全包含应有的数据集。由于hash映射法的时间复杂度近似为o(1),本发明方法能够极大地提高系统的读取速度。以下是进行查询的详细操作过程:1.用户发出查询请求,系统初始化,判断用户是否是第一次进行查询;2.若用户是第一次进行查询,则进行步骤3,否则跳到10;3.为后一次查询进行准备的预存储操作时,在硬盘中申请两级的存储空间;值得说明的是:用于存储三维数据表的低级存储空间大小应足够大,足够大是指低级存储空间应大于系统涉及所有数据库表的大小之和;4.初始化三维表,建立一个正式三维表结构tb,一个临时三维表结构tb’,x轴为数据的各个属性,y轴逐行数据记录,z轴为查询结果次数;tb和tb’的结构相同,可设定一个临时的中间变量,用于数据在两个三维表之间的传递。5.初始化hash表,用来存储hash函数计算所得地址和查询时的条件数据,记低级存储空间的hash表为tbhl,高级存储空间的hash表为tbhh,hash表应存储原数据和根据hash函数计算后的地址;6.初始化相关参数,应用程序设定统计次数阈值v,取值范围是大于2的正整数,具体需要对存储的数据进行需求分析,通常数值在5~20之间即可(取值太小会导致经常有数据需要映射存储到高级存储空间中,加大了系统运算的负担,太小会导致极少有数据达到阈值,高级存储空间存储的数据较少,利用率低下),系统用于记录统计次数的值v’,三维表生命周期变量记为t;7.根据用户输入的条件在数据库中进行第一次查询;查询过程中对某一个数据库表和与之有关联的表进行多表关联操作;需要说明的是,管理大量数据的系统涉及的数据库表一般有多个,根据不同数据的类别设立,其中会根据某一些共有的项对多个表的数据进行关联。对某一个数据库表进行操作的时候,需要对与之有关联的表进行关联操作。若用户在系统中输入第一次查询条件进行多个表关联查询,系统会根据sql语句在数据库中进行查询,并将结果使用结果表呈现。查询操作通过使用sql语句进行,例如,对多个表的join查询操作,输入的一条sql语句根据条件关联查询多个表,会得到一张结果表。记第一次查询结果表为tb1,表中横向(x轴)为数据的各个属性,记为a,b,c...;表中纵向(y轴)为tb1表中记录的所有数据,记为n1,n1的取值范围为0至n1;将tb1表中的数据复制到临时三维表结构tb’中;8.将tb’中数据依次转换成二进制数,记为x1,x2,x3…,并定义hash映射函数;本发明中,hash映射函数定义为:f(x)=(x2div10p)mod10q。也可以自定义常用的hash映射函数,本发明中使用平方取中法。其中q为二进制数x的位数,p为中间数字所在的位数,即p=qdiv2,从二进制中间取p位,即为映射结果f(x)。若二进制数过短,则不取中,取所有位数。一般小于10位二进制数不取中。例如,临时三维表存储“番茄,农药,1,2”字符串数据,正式三维表存储的是“番茄,农药,1,2”转换成二进制的结果,即临时三维表结构是查询到的数据,之后转换成二进制转存到正式三维表中,再由hash函数计算映射不连续地存储到低级存储空间中。值得说明的是,hash计算会产生冲突,本发明使用再hash算法,即产生冲突后,将产生冲突的二进制再使用hash映射函数f(x)计算一次后映射,将数据经过设定好的hash函数f(x),计算地址结果后依次填充到hash表tbhl中。9.将tb’中的数据连同hash表tbhl存入低级存储空间中;10.若用户是第二次进行查询(第二次输入的查询条件与第一次查询不同),由于高级存储空间中为空,系统会自动到低级存储空间的hash表tbhl中查找(hash表中存储第一次查询的条件,故容易得出低级存储空间有没有匹配数据),记低级存储空间中匹配的数据为tb2’;若第二次查询的条件与第一次条件相同,由于第一次查询的已经存储到低级存储空间中。第二次的查询先查询高级存储空间是否有匹配情况(第二次查询时高级存储空间为空),再判断低级存储空间是否有匹配的情况,那么在时间复杂度为o(1)内即可找到完全匹配,从而查询到数据而跳出循环;若不是第二次查询(等同于次数v’>=v阈值的情况),则跳到步骤14;11.判断tb2’是否完全包含了第二次查询的所有数据(判断是否包含直接判断hash表中的条件是否完全匹配/一致即可),若完全包含则结束操作;否则执行步骤12;当hash表中条件和该查询条件不是完全一致时,说明查找结果集未包含或未完全包含应有的数据集。12.根据用户输入的条件进入数据库中查询,此时记第二次查询结果表为tb2,横向(x轴)不变,纵向为tb2表中记录的所有数据,记为n2,n2的取值范围为0至n2;13.当前查询结果表(第二次查询为tb2)与之前的临时三维表的结果tb’取并集,并集结果集更新到临时三维表结构tb’中;将临时三维表tb’中的数据转换成二进制,存储到正式三维表tb中,记录z轴数据为当前次数阈值v’,对比v’与之前设定好的阈值v,若v’<v则继续进行步骤15,若v’>=v则进行步骤14。值得说明的是:(1)当前查询结果表(第二次查询为tb2)与之前的临时三维表的结果tb’的数据是根据用户输入的条件查询的,可能没有交集部分,可能进行不同表的关联查询,导致两张表的属性列不同。若两张表具有共同主键的属性列,则可将两张表按照相同属性列的方式重叠显示,此方法有助于三维表的属性扩展,如图2中的表ta与te;(2)如表2中所示,用户可能根据不同的查询条件生成的sql语句查询不同的结果表,即ta与te所示,或ta与tf所示,由于x轴代表数据的各个属性。即ta与te的阴影部分为两个表共有的属性列,ta与tf没有共有的属性列则并排存储。表2hash映射编码表(3)取并集的过程是把两个表中的全部数据合并,将两个表重复的数据去重,按照三维表中的z轴重复的次数记录频次,如表2阴影重叠的频次数;此时三维表中的数据总数记为n;14.将正式三维表tb中频次超过v’的部分数据,再次使用hash函数:f(x)=(x2div10p)mod10q计算地址并映射至高级存储空间中,更新高级存储空间中的hash表tbhh。同时,映射过程遵循上述再hash方法,接着存储过程结束,等待下一次读取查询操作。15.根据用户读取查询的需求,用户输入条件第三次及之后的查询,系统先到高级存储空间的hash表tbhh中查询(即匹配hash表中存储的条件),若在高级存储空间中匹配到数据,记录该数据集为tb3”...tbn”,若完全包含所有要查询的数据则跳出结束,否则进行步骤16。16.系统在高级存储空间的hash表中查询完毕后,到低级存储空间的hash表tbhl中查询(同样为匹配hash表中存储的条件),若在低级存储空间中匹配到数据,则记录数据集为tb3’...tbn’,并与高级存储空间中查询到的数据集做并集操作,记并集结果依次为q3,...,qn(即q3=tb3”∪tb3’…qn=tbn”∪tbn’)。17.判断并集结果q3...qn是否包含当前查询的所有数据,若完全包含所有要查询的数据则跳出循环,结束操作,否则进行步骤18。18.由于低、高存储空间的hash表中存有查询条件,系统会根据当前用户输入的条件对sql语句进行优化重写;本发明实施例有详细例子说明。19.根据新的sql语句进入数据库中查询,此时记第三次至第n次的查询结果表为tb3,...,tbn,横向(x轴)不变,纵向为tb2表中记录的所有数据,依次记为n3,…,nn;此次用户查询结果集合为低级存储空间结果集、高级存储空间结果集和当前数据库查询结果集三者的并集结果,记为o3,…,on,即o3=q3∪tb3...on=qn∪tbn,并输出结果;20.当前查询结果表tb3...tbn与之前的正式三维表的结果tb2...tbn-1取并集,并集结果集更新到临时三维表结构tb’中,将临时三维表tb’中的数据转换成二进制,存储到正式三维表tb中,记录z轴数据为当前次数阈值v’,对比v与之前设定好的阈值v,若v’<v则继续进行步骤22.,若v’>=v则进行步骤21.。21.将正式三维表中频次超过v’的部分数据,再次使用hash函数:f(x)=(x2div10p)mod10q计算地址并映射至高级存储空间中,更新高级存储空间中的hash表tbhh。同时,映射过程遵循上述再hash方法。22.存储过程结束;等待下一次读取查询操作,跳到步骤15。系统在运行时,时刻保证低、高存储空间中hash表的生命周期。根据步骤6中定义的生命周期变量t,当定时器从用户发出第一次请求至生命周期时,即0~t时,系统会首先自动清空高级存储空间中的数据和hash表,同时将定时器清0;当时间再次到达生命周期变量t时,系统会再次清空高级存储空间的数据和hash表,若此时高级存储空间无数据与hash表,则会清空低级存储空间的数据和hash表。此设定有效的避免了数据过多而导致的存储空间溢出的问题。与现有技术相比,本发明的有益效果是:本发明提供一种基于三维表结构的数据关联存取方法,对用户发出的请求进行解析,对若干数据库表进行关联操作,并进行读取或存储操作。具体地,本发明具有以下技术优势:(一)传统方法随着用户查询次数的增加,读取查询的速度越来越慢;而采用本发明的方法,读取查询的速度随着查询次数的增加越来越快;(二)本发明极大地提高了系统存取数据的效率,其效率不会因为数据量增大而给计算机带来指数型增长的压力;(三)读取查询速度由设定的低存储空间和高存储空间、三维表频次统计阈值和三维表定时清空变量共同决定,可由用户自行定制,灵活性和智能性强;(四)三维表结构可以对多个相互之间有相同主键的数据库表进行关联存储,具有很强的扩展性;(五)低、高存储空间中的hash表不仅存有三维表中数据的存储地址,还存有查询三维表时的条件;系统在检查低、高存储空间中是否含有之前查询过的数据时,只需查询hash表中存储的条件即可快速做出相应。附图说明图1为本发明提供方法的流程框图。图2为本发明中三维表结构示意图;其中,ta、tb、tc、td、te、tf为用户发起的多次数据查询的结果表,这些表在没有顺序之分,在实施例中根据用户的条件可有顺序之分;每一张表的x轴代表表的各个属性列,y轴代表数据记录数也可称作数据条数,z轴方向有重叠的部分就是数据重叠的部分,三维表中记录重叠频次是计算在z方向上重叠的次数;如图2所示,ta与tb的x方向上相同也就是说明这两张表查询的数据属性列是相同的;一般数据存储不是连续的,所以两张表中间空了一部分,平铺显示;tb,tc和td在x方向上和ta也相同,代表tb,tc和td三张表和ta查询的数据的属性列是相同的;但由于每次查询得到的结果数据不同所有在显示时交错显示,重叠的部分代表共有的数据也就是发明中提到的交集部分;可以看到阴影重叠部分频次记为3,tb和td,td和tc还有重叠频次为2的部分难以表示,没有在图中标识;ta与te在x轴方向上不完全相同,但有重叠的部分代表有相同的属性列,是根据该属性列作为主键对ta与te两个表进行关联存储的;y轴方向上有重叠的部分代表有相同数量的数据,这里也可以不同;同理ta和tf在x轴方向上不相同,没有重叠部分代表两张表不是关联的,没有共同的属性列,三维表中,非关联的数据在x轴方向上平铺显示存储,y轴代表数据量。图3为本发明具体实施例中三维表的正视示意图;图4为本发明具体实施例中三维表的侧视示意图;其中,图3~4相当于节选展现了图2中的几个表;图3中ta和te代表以农产品名为共同属性列即相同主键的关联表数据,ta存储了多个国家或地区mrl标准信息,te存储了多个国家或地区农产品分类信息。这两张表是根据该属性列作为主键对ta与te两个表进行关联存储的。图5为本发明中由低级存储空间至高级存储空间的数据流向框图。图6为本发明具体实施例中使用与未使用两级存储空间存储读取方法所用的时间对比图;其中,存储读取均使用系统随机生成查询条件,保证每次查询的数据在100条至10000条之间;(a)为使用本发明中方法,但设置不同阈值,分别设置5和10,可以看到在查询次数30次之前是阈值为5时速度快,30次之后一直到100次查询时是阈值为10时速度快,实施例中做了详细的对比分析;(b)为未使用本发明方法,即使用现有传统方法直接查询读取数据和设置阈值5和10三者的对比,由于阈值为5和10的时间随查询次数的图形变化较小,所以在(a)中把使用阈值的情况单独列出,来区分这两种方法,可以看到未使用本发明的方法的查询时间随着查询次数的上升而增加得很快,呈多次幂上升,使用本发明方法则呈线性缓慢上升。具体实施方式下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。本发明提供了一种基于三维表结构的数据关联存取方法,并将其应用于管理多个国家或地区mrl标准数据的系统中,可以较大地提高系统存取数据的效率。本发明方法可以应用于普适情况下的管理系统的存取功能中,一般普适情况下的管理系统括应用程序和数据库,而硬件部分包括存储设备。应用程序是编程实现的系统,用于接收用户指令,将指令转换为相关机器语言和操作;数据库是用来组织、存储和管理数据的仓库,一些常见的数据库,如oracle,sqlserver,mysql。另外农药残留数据管理系统存储功能的硬件部分包括存储设备,存储设备是用于储存信息的设备,可为硬盘驱动器(hdd),固态存储器(ssd)或直接存储器(dasd)。图1为本发明提供方法的流程框图。将本发明方法应用于管理多个国家或地区mrl标准数据的系统,系统响应用户首次根据需求查询所查询的农药、农产品或mrl标准信息请求,拆分成数据库农药表、农产品表和各国mrl标准表的关联操作,读取数据。申请两层存储空间用于存储每次的查询结果,定义频次阈值和hash映射函数,设计并构建食品安全信息的三维表结构,将查询的结果依次使用hash映射存储到低级存储空间中的三维表;统计各项重叠的频次,超过阈值的数据则使用hash再次映射到高级存储空间的三维表中。用户发起第二次之后的读取查询操作先到高级存储空间中的三维表中查询,若无数据或未查询完全则到低级存储空间中的三维表中查询,若再无数据或未查询完全则到常规存储空间中查询,同时运行hash映射存储过程,以此循环,单次数据流向如图5所示。将本
发明内容应用于农药残留数据管理系统中,实现了对农药信息、农产品信息以及多个国家或地区农药残留最大限量mrl标准信息多个关联表结构的有效管理,极大提高了存取的速度。使用多个国家或地区mrl标准数据进行验证,发现可以极大地提高系统运作效率。本发明具体实施时,多个国家或地区mrl标准数据表如表1所示,含有农药名称,中国mrl标准限量值,香港mrl标准限量值,美国mrl标准限量值,日本mrl标准限量值,欧盟mrl标准限量值,cac的mrl标准限量值,农产品名等信息。表1实施例中多个国家或地区mrl标准数据表示例农药数据库表含有农药名,农药cas号,农药用途,农药分子式,农药毒性等。农产品数据库表含有农产品名,农产品各级分类等。其中,农药数据表可以通过农药名称作为主键与多个国家或地区mrl标准数据表进行关联,农产品数据表可以通过农产品名称作为主键与多个国家或地区mrl标准数据表进行关联,日后可能还需要对其他属性列进行关联表的扩充操作。用户可以对多个表关联存储操作。本实施例中,用户重复查询2014年mrl标准数据,初始化三维表结构,建立一个正式三维表结构tb,一个临时三维表结构tb’,并在存储空间中申请两级存储空间,命名为低级、高级存储空间,定义三维表统计数据重叠的频次阈值(下称阈值)v=3,生命周期变量t=100秒(s)。如图2所示,x轴为农药mrl标准信息记录的各个属性(pesticidename,cnmrl,hkmrl,usamrl,jpnmrl,eurmrl,cacmrl,gbid,note,entryintoforce,expirydate,productname等,后期可扩展),y轴为记录的数据量,z轴为查询结果次数。本实施例设定了四次查询。第一次查询条件为:农产品番茄,查询出的数据包含所有农药在番茄中施加的mrl标准数据;其中肯定包含农药difenoconazole在番茄中的数据,包括中国mrl=1,香港mrl=1,美国mrl=2,日本mrl标准=0.01,欧盟mrl=1,cac的mrl标准=0.5等其他mrl信息。第二次查询条件为农药为difenoconazole,可想而知查询到的是在农药difenoconazole施加下的所有农产品的,其中包括difenoconazole在番茄中施加的数据,包括中国mrl=1,香港mrl=1,美国mrl=2,日本mrl标准=0.01,欧盟mrl=1,cac的mrl标准=0.5等其他mrl信息。第三次查询条件为中国mrl标准值大于等于3的数据,可想而知数据农药difenoconazole,农产品番茄,中国mrl=1,香港mrl=1,美国mrl=2,日本mrl标准=0.01,欧盟mrl=1,cac的mrl标准=0.5这条刚刚前两次查询均查到的数据不包含在这次查询中,所以“农药difenoconazole,农产品番茄,中国mrl=1,香港mrl=1,美国mrl=2,日本mrl标准=0.01,欧盟mrl=1,cac的mrl标准=0.5”这条数据查询过的频次记为2,同时第三次查询到了很多其他的数据,但这条不包含在此次查询的范围内。同理,第四次查询条件为日本mrl标准值小于0.05的数据,那么前两次同时查找到的数据“农药difenoconazole,农产品番茄,中国mrl=1,香港mrl=1,美国mrl=2,日本mrl标准=0.01,欧盟mrl=1,cac的mrl标准=0.5”在这个范围内,频次应该从2变为3。若用户设置的阈值为3,那么这条数据已经达到了阈值,这条数据接下来会被hash映射计算存储地址并存储到高级存储空间中。在这里,上述查询只是一种实例。每次查询不一定有重叠的部分。根据用户的查询条件的细化,总有查询结果重叠的部分。当有重叠的部分,利用本发明方法进行查询的存储读取,即可提高查询效率。以下详细描述查询过程:(一)例如,用户第一次查询条件为农产分类为茄果类、农药为全部时,系统第一次查询结果表为tb1,表中横向(x轴)为数据的各个属性项,查询到的第一条数据为:difenoconazole,1,1,2,0.01,1,0.5,gb2763-2014,空,番茄,则记为a为difenoconazole,b为1,c为1,d为2,e为0.01,f为1,g为0.5,h为gb2763-2014,i为空值,j为番茄;表中纵向(y轴)为tb1表中查询出的数据总量,此处为216条记录,将数据存储到临时三维表tb’中;(二)例如用户第二次查询条件为农药difenoconazole,农产品为全部时,系统首先根据上述发明方法的步骤,到高级存储空间中查询,由于第一次没有数据写入高级和低级存储空间中,系统跳出,直接进入常规存储空间中进行查询,记录查询结果表为tb2,查询到的第一条数据为:difenoconazole,2,2,3,0.01,3,2,gb2763-2014,空,黄瓜,则记为a为difenoconazole,b为2,c为2,d为3,e为0.01,f为3,g为2,h为gb2763-2014,i为空值,j为黄瓜,横向(x轴)不变,纵向(y轴)为tb2表中数据总量,记为n2此处为18992条,同样将数据存储到临时三维表tb’中;(三)在tb’存储的时候需要将表tb1与表tb2按照相同的属性数据列进行取并集操作,值得说明的是,取并集的过程是把两个农产品查询结果表中的全部数据合并整合,将两个表重复的数据去重,同时记录重叠部分的频次v’。图3中的tb与tc的阴影部分为交集部分,即表示阴影部分的数据重复查询了两次,记录频次v’+1,如图3所示,ta表与tb没有重复的数据,即平铺存储;本实施例第一次与第二次查询时,数据:difenoconazole,1,1,2,0.01,1,0.5,gb2763-2014,空,番茄,包含在两次查询中,即记录该条数据的频次为v’=2,其他记录频次为1。图3为本发明具体实施例中三维表的正视示意图;图4为本发明具体实施例中三维表的侧视示意图;其中,图3~4相当于节选展现了图2中的几个表;图3中ta和te代表以农产品名为共同属性列即相同主键的关联表数据,ta存储了多个国家或地区mrl标准信息,te存储了多个国家或地区农产品分类信息。这两张表是根据该属性列作为主键对ta与te两个表进行关联存储的。用户第一次查询的条件是农产分类为茄果类,农药为全部,查询到的数据在三维表中如tb所示,y方向是数据量。第二次查询条件是农药为difenoconazole,农产品为全部,查询到的数据在三维表中如tc所示存储。两者重叠的部分代表农药difenoconazole在所有茄果类水果的mrl标准数据。其中,实施例中数据“农药difenoconazole,农产品番茄,中国mrl=1,香港mrl=1,美国mrl=2,日本mrl标准=0.01,欧盟mrl=1,cac的mrl标准=0.5”是重叠的数据之一。第三次的查询条件为中国mrl标准值大于等于3的所有数据,可知:“农药difenoconazole,农产品番茄,中国mrl=1,香港mrl=1,美国mrl=2,日本mrl标准=0.01,欧盟mrl=1,cac的mrl标准=0.5”这条数据不在条件范围内,但茄果类其他水果的数据可能在这个范围内,阴影的部分表示满足中国mrl标准值大于等于3的数据,tb,tc,td重叠的部分频次为3。(四)定义hash映射函数为:f(x)=(x2div10p)mod10q,其中q为二进制数x的位数,p为中间数字所在的位数,即p=qdiv2,从二进制中间取p位,即为映射结果f(x),小于10位的二进制数不取中,取所有位数;hash计算会产生冲突,本实施例同样使用再hash算法,即产生冲突后,将产生冲突的二进制再使用f(x)计算一次后映射;(五)将临时三维表tb’中的数据转换成二进制后使用hash映射函数计算,计算结果填充到正式三维表tb中,计算结果的地址和查询条件,记为hash表tbhl,如表3的实例所示。根据地址将当前tb’和tbhl存储到低级存储空间中。此时,低级存储空间中的应该存储了第一和第二次查询所有的并集数据,共计19207条数据;表3实施例中hash表部分示意图目标名称经过hash函数计算出的存放地址番茄(农产品)01000100000010010011010100101110100alachlor(农药)10000111000110101101111010100110110110001011010000001110110001002(中国mrl标准限量值)1002(香港mrl标准限量值)10000(100导致冲突,再hash计算一次)2(美国mrl标准限量值)100000000(100000导致冲突,再hash计算一次)1(日本mrl标准限量值)13(cac的mrl标准限量值)110(六)若用户第三次根据mrl标准限量值来查询数据,输入中国mrl标准大于等于3为条件时,系统根据上述发明中的方法,先到高级存储空间中进行查询,由于高级存储空间中数据为空,则转到低级存储空间中查询。(七)因为低级存储空间中的hash表tbhl中存有第一次和第二次的查询条件,故直接匹配条件进行数据的地址获取即可,取到数据记为tb3’。(八)系统将刚刚查询到数据的条件加入到sql语句中,自动生成新的sql语句,在常规存储空间中查询,本次实施例中第三次的查询sql语句为:select*fromdic_multinationalmrl_infowherecnmrl>=‘3’在低级存储空间中匹配完毕后,加入新的条件更新sql语句为:select*fromdic_multinationalmrl_infowherecnmrl>=‘3’and(productclass!=‘茄果类’orpesticidename!=‘difenoconazole’)系统根据新的sql语句到常规存储空间中的数据库表中查询,查询结果记为tb3,本实施例第一次、第二次和第三次查询时,数据为:difenoconazole,1,1,2,0.01,1,0.5,gb2763-2014,空,番茄;包含在两次查询中,在第三次查询时未查询,所以该条数据的频次还为v’=2,同时频次为2的数据为148条,在此不一一列举。(九)系统第四次及之后的查询结果均遵循先到高级存储空间中的hash表中匹配条件查询,记高级存储空间的结果表为tb4”...tbn”,再到低级存储空间中的hash表中匹配条件查询,记低级存储空间的结果表为tb4’...tbn’,两者同次查询的并集结果记为q4...qn。(十)依次判断并集结果q4...qn是否包含所有要查询的数据,若q4...qn有一次全部包含要查询的数据则输出结束qm,代表该次并集结果包含了该次查询的所有结果,即输出qm为最终结果,若未完全包含则执行下一步。(十一)例如用户第四次要查询日本mrl标准值小于0.5的数据,此时sql语句为:select*fromdic_multinationalmrl_infowherejpnmrl<‘0.5’分析可知,前三次的查询有重复的数据,但也有未包含的数据,系统在高存储空间中查询结果为tb4”,在低存储空间中的查询结果为tb4’,并集结果记为q4。在高、低存储空间中匹配完毕后,加入新的条件更新sql语句为:select*fromdic_multinationalmrl_infowherejpnmrl<‘0.5’and(cnmrl>=‘3’orproductclass!=‘茄果类’orpesticidename!=‘difenoconazole’)(十二)本实施例第一次、第二次、第三次和第四次查询时,数据:difenoconazole,1,1,2,0.01,1,0.5,gb2763-2014,空,番茄,包含在第一、二、四次查询中,在第三次查询时未查询,所以该条数据的频次更新为v’=3,同时频次为3的数据还有76条,在此不一一列举。(十三)根据阈值设定的v=3,将这77条数据使用上述定义的hash函数计算地址后,连同查询条件存储到高级存储空间中,计算过程同样遵循再hash的设定。(十四)使用新sql语句到常规存储空间的数据库中查找,记结果为tb4,最终查询结果为tb4∪q4;(十五)实施例中,当查询进行到第六次时,操作时间达到设定的生命周期变量t=100s,系统依次清除高级存储空间和低级存储空间的数据。之后的操作按照上述方法循环往复。实施例中,在高级存储空间和低级存储空间使用hash函数映射查找,各需查找一次,且时间复杂度为o(1),可以极大的提高系统的相应速度。值得说明的是,本发明中的查询速度会随着查询次数的增加而近似线性的增长,而非传统方法的多幂次线性上升(本实施例中测试的数据增长速度在二次方到三次方之间)。使用查询大数据验证系统提高效率的有效性:i.用户重复查询六个国家或地区(中国,香港,美国,日本,欧盟,国际食品法典委员会)的农产品信息、农药信息和各自mrl标准限量值,共计598条农产品信息、2071条农药信息、328102条mrl标准数据;ii.将上述存储与读取操作使用编程方法实现,并在系统中加入定时器功能记录生命周期变量;iii.初始化低级存储空间到高级存储空间的阈值,设置阈值为5和10,分别测试100次系统响应时间并记录,如图6上图(a)所示;iv.使用系统随机生成查询条件,保证每次查询的数据量在100条至10000条之间;v.记录不使用本发明中存储与读取方法分别测试100次不同数据时系统的响应时间,并与iii步骤中的结果进行对比,整体如如图6下图(b)所示。不同的查询条件和查询数据量可能对实施例测试结果有影响,但通过大致地对比分析可知,使用两级的存储空间和hash映射会比常规的方法节省较多时间,适用本发明的方法随着查询次数的上升查询时间大致呈线性变化;而常规方法的查询时间呈幂次上升趋势。在0~30查询次数时,由于三维表中查询数据的重叠部分,即没有到达设定的阈值,这时数据还未写入高级存储空间,故30次之前的查询,设定阈值为5会比设定为10速度快。但随着查询次数的增加,阈值为10的查询速度会快于阈值为5的情况。总体来说,两者均极大提高存读取效率,可以通过具体的使用需求设置本发明中统计频次阈值与生命周期变量,进一步提高效率。需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1