本發(fā)明涉及數(shù)據(jù)的存儲(chǔ)讀取技術(shù),尤其涉及一種基于三維表結(jié)構(gòu)的數(shù)據(jù)關(guān)聯(lián)存取方法,并應(yīng)用于面向農(nóng)藥、農(nóng)產(chǎn)品、農(nóng)藥殘留限量(maximumresiduelimit,mrl)標(biāo)準(zhǔn)數(shù)據(jù)的關(guān)聯(lián)、存儲(chǔ)和讀取。
背景技術(shù):
:隨著信息化社會(huì)的建設(shè),大數(shù)據(jù)存儲(chǔ)讀取的問(wèn)題也隨之暴露出來(lái)。在現(xiàn)有的技術(shù)中,常常會(huì)使用關(guān)系型數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)信息。當(dāng)使用關(guān)系型數(shù)據(jù)庫(kù)sql(結(jié)構(gòu)化查詢語(yǔ)言)查詢大量數(shù)據(jù)的時(shí)候,結(jié)果表中數(shù)據(jù)量大,系統(tǒng)響應(yīng)過(guò)慢,甚至?xí)?dǎo)致系統(tǒng)癱瘓宕機(jī)。使用多個(gè)數(shù)據(jù)庫(kù)表存儲(chǔ)不同類別數(shù)據(jù)時(shí),需設(shè)計(jì)實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的關(guān)聯(lián)操作。數(shù)據(jù)的存取速度從一定程度上影響系統(tǒng)的性能。使用hash映射法可以提高系統(tǒng)查詢和插入數(shù)據(jù)效率,使系統(tǒng)的時(shí)間復(fù)雜度接近o(1)。所謂的hash,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射,pre-image),通過(guò)散列算法,變換成固定長(zhǎng)度的地址輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來(lái)唯一的確定輸入值。簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。也就是說(shuō),hash將預(yù)映射通過(guò)hash算法計(jì)算后映射到表中一個(gè)地址,可直接根據(jù)地址訪問(wèn)記錄,可加快查找的速度。但是,現(xiàn)有hash映射方法將數(shù)據(jù)通過(guò)一次hash映射映射到存儲(chǔ)空間中,當(dāng)發(fā)生多次查詢時(shí),讀取查詢的速度越來(lái)越慢,查找效率越低。在現(xiàn)有的農(nóng)藥殘留數(shù)據(jù)管理系統(tǒng)中,要存儲(chǔ)農(nóng)藥殘留限量標(biāo)準(zhǔn)(maximumresiduelimit,mrl)、農(nóng)藥、農(nóng)產(chǎn)品等相關(guān)信息。mrl中的每一條限量值是指某種農(nóng)藥在某種農(nóng)產(chǎn)品中的限量值,且需要根據(jù)政府頒布的新標(biāo)準(zhǔn)隨時(shí)更新。對(duì)于mrl、農(nóng)產(chǎn)品及農(nóng)藥信息表,是針對(duì)每張表進(jìn)行關(guān)聯(lián)操作,才能得到相應(yīng)的信息;在對(duì)數(shù)據(jù)進(jìn)行讀取操作時(shí),是通過(guò)讀取磁盤上的數(shù)據(jù)傳遞給用戶。但是,這樣會(huì)存在一些問(wèn)題,比如想要獲取mrl和農(nóng)產(chǎn)品之間的關(guān)聯(lián)信息或存儲(chǔ)關(guān)聯(lián)信息時(shí),就會(huì)比較困難;另一方面,磁盤的讀取速度較慢,在數(shù)據(jù)量大的情況下,這個(gè)問(wèn)題尤為突出。技術(shù)實(shí)現(xiàn)要素:本發(fā)明設(shè)計(jì)了一種基于三維表結(jié)構(gòu)的數(shù)據(jù)關(guān)聯(lián)存儲(chǔ)與讀取方法,解決了數(shù)據(jù)關(guān)聯(lián)存取問(wèn)題,提高了系統(tǒng)存取數(shù)據(jù)的效率;將本
發(fā)明內(nèi)容應(yīng)用于農(nóng)藥殘留數(shù)據(jù)管理系統(tǒng)中,實(shí)現(xiàn)了對(duì)農(nóng)藥信息、農(nóng)產(chǎn)品信息以及多個(gè)國(guó)家或地區(qū)農(nóng)藥殘留最大限量mrl標(biāo)準(zhǔn)信息的關(guān)聯(lián)存取和有效管理,極大提高了存取的速度,提高數(shù)據(jù)管理的效率。本發(fā)明的核心是:現(xiàn)有hash映射方法通過(guò)一次hash映射,將數(shù)據(jù)映射到存儲(chǔ)空間中。本發(fā)明在hash映射方法基礎(chǔ)上進(jìn)行優(yōu)化,設(shè)計(jì)了兩層額外的存儲(chǔ)空間,通過(guò)對(duì)三維表的映射,達(dá)到對(duì)數(shù)據(jù)的分層存儲(chǔ),對(duì)于經(jīng)常操作的數(shù)據(jù),存儲(chǔ)到高級(jí)存儲(chǔ)空間中,由此達(dá)到進(jìn)一步提升速度的目的。本發(fā)明中,系統(tǒng)響應(yīng)用戶首次的查詢請(qǐng)求,將查詢請(qǐng)求拆分成數(shù)據(jù)庫(kù)的多表關(guān)聯(lián)操作,讀取數(shù)據(jù)。設(shè)置兩層存儲(chǔ)空間用于存儲(chǔ)查詢結(jié)果,設(shè)計(jì)并構(gòu)建三維表結(jié)構(gòu),定義用于統(tǒng)計(jì)三維表中數(shù)據(jù)重疊頻次的閾值和hash映射函數(shù),將查詢的結(jié)果依次使用hash映射存儲(chǔ)到低級(jí)存儲(chǔ)空間中的三維表;統(tǒng)計(jì)各項(xiàng)重疊的頻次,超過(guò)閾值的數(shù)據(jù)則使用hash再次映射到高級(jí)存儲(chǔ)空間的三維表中。當(dāng)用戶發(fā)起第二次及之后的讀取查詢操作時(shí),先到高級(jí)存儲(chǔ)空間中的三維表中查詢,若無(wú)數(shù)據(jù)或未查詢完全則到低級(jí)存儲(chǔ)空間中的三維表中查詢,若再無(wú)數(shù)據(jù)或未查詢完全則到常規(guī)存儲(chǔ)空間中查詢,同時(shí)運(yùn)行hash映射存儲(chǔ)過(guò)程,以此循環(huán)。將本
發(fā)明內(nèi)容應(yīng)用于農(nóng)藥殘留數(shù)據(jù)管理系統(tǒng)中,實(shí)現(xiàn)了對(duì)農(nóng)藥信息、農(nóng)產(chǎn)品信息以及多個(gè)國(guó)家或地區(qū)農(nóng)藥殘留最大限量mrl標(biāo)準(zhǔn)信息多個(gè)關(guān)聯(lián)表結(jié)構(gòu)的有效管理,極大提高了存取的速度。本發(fā)明提供的技術(shù)方案是:一種基于三維表結(jié)構(gòu)的數(shù)據(jù)關(guān)聯(lián)存取方法,用于實(shí)現(xiàn)管理系統(tǒng)的高效數(shù)據(jù)存取訪問(wèn)操作;管理系統(tǒng)至少包括硬件系統(tǒng)(包括存儲(chǔ)設(shè)備)、數(shù)據(jù)庫(kù)和應(yīng)用程序;所述存取方法針對(duì)存儲(chǔ)設(shè)備額外設(shè)計(jì)兩層的存儲(chǔ)空間;用戶發(fā)出的請(qǐng)求進(jìn)行解析,通過(guò)對(duì)多個(gè)數(shù)據(jù)庫(kù)表進(jìn)行關(guān)聯(lián)操作,設(shè)立三維表,用于多個(gè)表關(guān)聯(lián)數(shù)據(jù)的顯示和統(tǒng)計(jì)查詢重疊的頻次;使用hash函數(shù)和hash表計(jì)算得到地址作為下一次存儲(chǔ)的地址;由此對(duì)實(shí)現(xiàn)查詢讀取或查詢存儲(chǔ)操作;所述查詢讀取操作是指查詢時(shí)進(jìn)行的讀取操作;所述查詢存儲(chǔ)操作是指為后一次查詢讀取進(jìn)行準(zhǔn)備的預(yù)存儲(chǔ)操作;當(dāng)用戶操作是第一次查詢時(shí),先進(jìn)行讀取查詢,再進(jìn)行查詢的存儲(chǔ)操作;當(dāng)用戶操作不是第一次查詢時(shí),根據(jù)之前的一次或多次查詢時(shí)的預(yù)存儲(chǔ)操作結(jié)果進(jìn)行數(shù)據(jù)的讀取查詢,需要時(shí)(若當(dāng)前存儲(chǔ)空間中未完全包含本次要查詢的數(shù)據(jù))對(duì)當(dāng)次查詢數(shù)據(jù)進(jìn)行預(yù)存儲(chǔ)操作;所述存取方法包括如下步驟:1)在存儲(chǔ)設(shè)備中除常規(guī)存儲(chǔ)空間之外,申請(qǐng)兩級(jí)存儲(chǔ)空間,分別為低級(jí)存儲(chǔ)空間和高級(jí)存儲(chǔ)空間,用于存儲(chǔ)hash表和使用hash函數(shù)計(jì)算映射的數(shù)據(jù)(低級(jí)存儲(chǔ)空間、高級(jí)存儲(chǔ)空間的數(shù)據(jù)需要分開(kāi)存儲(chǔ));所述存儲(chǔ)設(shè)備包括常規(guī)存儲(chǔ)空間、低級(jí)存儲(chǔ)空間和高級(jí)存儲(chǔ)空間;2)設(shè)計(jì)并建立結(jié)構(gòu)相同的兩個(gè)三維表,分別稱為正式三維表和臨時(shí)三維表;三維表結(jié)構(gòu)中,x軸為數(shù)據(jù)的各個(gè)屬性,y軸逐行數(shù)據(jù)記錄,z軸為查詢結(jié)果存儲(chǔ)次數(shù);本發(fā)明中,創(chuàng)建的三維表結(jié)構(gòu)可以:(1)統(tǒng)計(jì)用戶多次查詢數(shù)據(jù)的重疊部分;(2)對(duì)存儲(chǔ)多次查詢不相同的數(shù)據(jù)提供了可行性;其中,不相同的數(shù)據(jù)是指,用戶輸入的查詢條件(sql)語(yǔ)句不同,導(dǎo)致查詢出的結(jié)果數(shù)據(jù)也不同,體現(xiàn)在結(jié)果表中列屬性不相同,這些多次查詢的數(shù)據(jù)都有相同列(如一個(gè)或兩個(gè)),其他列不同,這樣的數(shù)據(jù)被稱為關(guān)聯(lián)數(shù)據(jù)。三維表結(jié)構(gòu)可以對(duì)x、y軸兩個(gè)方向進(jìn)行拓展,如圖2,三維表結(jié)構(gòu)為存儲(chǔ)關(guān)聯(lián)數(shù)據(jù)提供了可行方案。3)定義用來(lái)計(jì)算數(shù)據(jù)映射地址的hash函數(shù),將每一次查詢數(shù)據(jù)的結(jié)果集中存儲(chǔ)到臨時(shí)三維表中,將臨時(shí)三維表中的各個(gè)數(shù)據(jù)使用hash函數(shù)計(jì)算存儲(chǔ)地址,并根據(jù)計(jì)算所得地址將正式三維表中的數(shù)據(jù)連同存有查詢條件的hash表一同存儲(chǔ)在低級(jí)存儲(chǔ)空間中;所謂的hash表就是存儲(chǔ)了獲得正式三維表中的數(shù)據(jù)結(jié)果的查詢條件與數(shù)據(jù)映射地址的表;其中,每一次查詢數(shù)據(jù)是系統(tǒng)根據(jù)用戶輸入的條件,對(duì)常規(guī)存儲(chǔ)空間中的數(shù)據(jù)庫(kù)進(jìn)行查詢而得到的;臨時(shí)三維表中是用來(lái)存儲(chǔ)用戶每次在常規(guī)存儲(chǔ)空間查詢得到的數(shù)據(jù)的,是用戶多次查詢的數(shù)據(jù)集中取并集的結(jié)果;因?yàn)橛脩舳啻尾樵兊慕Y(jié)果中,可能有重復(fù)查詢的數(shù)據(jù),所以設(shè)計(jì)使用三維表存儲(chǔ)。再設(shè)置用于統(tǒng)計(jì)三維表中數(shù)據(jù)重疊頻次的頻次閾值,根據(jù)頻次閾值,將低級(jí)存儲(chǔ)空間中的數(shù)據(jù)經(jīng)hash映射后寫入高級(jí)存儲(chǔ)空間中。4)用戶根據(jù)需求自定義用于統(tǒng)計(jì)低級(jí)存儲(chǔ)空間三維表中數(shù)據(jù)重疊頻次的閾值,將超過(guò)閾值的低級(jí)存儲(chǔ)空間三維表中的部分?jǐn)?shù)據(jù)按照步驟3)中定義的hash函數(shù)再次計(jì)算地址,并根據(jù)計(jì)算所得地址將上述存有部分?jǐn)?shù)據(jù)的正式三維表連同步驟4)中所述的新hash表存儲(chǔ)到高級(jí)存儲(chǔ)空間中(這里注意區(qū)分,這個(gè)是存儲(chǔ)到高級(jí)存儲(chǔ)空間中的hash表,與步驟3)中存儲(chǔ)低級(jí)存儲(chǔ)空間中的hash表不同,不是一個(gè)表);存儲(chǔ)過(guò)程結(jié)束;5)設(shè)置定時(shí)清空高、低級(jí)存儲(chǔ)空間數(shù)據(jù)的生命周期變量;系統(tǒng)在運(yùn)行時(shí),當(dāng)時(shí)間達(dá)到生命周期變量時(shí),系統(tǒng)自動(dòng)按照高、低的順序逐步清空高低存儲(chǔ)空間中存儲(chǔ)的hash表和正式三維表數(shù)據(jù)。該操作保證了存儲(chǔ)空間不會(huì)過(guò)大而溢出。6)查詢讀取時(shí),先根據(jù)高級(jí)存儲(chǔ)空間的hash表查找,若查找結(jié)果集未包含或未完全包含應(yīng)有的數(shù)據(jù)集,則再根據(jù)低級(jí)存儲(chǔ)空間的hash表進(jìn)行查找;若仍查找不到,再到常規(guī)存儲(chǔ)空間中查找,同時(shí)運(yùn)行步驟3)~4)的hash映射存儲(chǔ)過(guò)程。當(dāng)hash表中條件和該查詢條件(例如sql語(yǔ)句)不是完全一致時(shí),說(shuō)明查找結(jié)果集未包含或未完全包含應(yīng)有的數(shù)據(jù)集。由于hash映射法的時(shí)間復(fù)雜度近似為o(1),本發(fā)明方法能夠極大地提高系統(tǒng)的讀取速度。以下是進(jìn)行查詢的詳細(xì)操作過(guò)程:1.用戶發(fā)出查詢請(qǐng)求,系統(tǒng)初始化,判斷用戶是否是第一次進(jìn)行查詢;2.若用戶是第一次進(jìn)行查詢,則進(jìn)行步驟3,否則跳到10;3.為后一次查詢進(jìn)行準(zhǔn)備的預(yù)存儲(chǔ)操作時(shí),在硬盤中申請(qǐng)兩級(jí)的存儲(chǔ)空間;值得說(shuō)明的是:用于存儲(chǔ)三維數(shù)據(jù)表的低級(jí)存儲(chǔ)空間大小應(yīng)足夠大,足夠大是指低級(jí)存儲(chǔ)空間應(yīng)大于系統(tǒng)涉及所有數(shù)據(jù)庫(kù)表的大小之和;4.初始化三維表,建立一個(gè)正式三維表結(jié)構(gòu)tb,一個(gè)臨時(shí)三維表結(jié)構(gòu)tb’,x軸為數(shù)據(jù)的各個(gè)屬性,y軸逐行數(shù)據(jù)記錄,z軸為查詢結(jié)果次數(shù);tb和tb’的結(jié)構(gòu)相同,可設(shè)定一個(gè)臨時(shí)的中間變量,用于數(shù)據(jù)在兩個(gè)三維表之間的傳遞。5.初始化hash表,用來(lái)存儲(chǔ)hash函數(shù)計(jì)算所得地址和查詢時(shí)的條件數(shù)據(jù),記低級(jí)存儲(chǔ)空間的hash表為tbhl,高級(jí)存儲(chǔ)空間的hash表為tbhh,hash表應(yīng)存儲(chǔ)原數(shù)據(jù)和根據(jù)hash函數(shù)計(jì)算后的地址;6.初始化相關(guān)參數(shù),應(yīng)用程序設(shè)定統(tǒng)計(jì)次數(shù)閾值v,取值范圍是大于2的正整數(shù),具體需要對(duì)存儲(chǔ)的數(shù)據(jù)進(jìn)行需求分析,通常數(shù)值在5~20之間即可(取值太小會(huì)導(dǎo)致經(jīng)常有數(shù)據(jù)需要映射存儲(chǔ)到高級(jí)存儲(chǔ)空間中,加大了系統(tǒng)運(yùn)算的負(fù)擔(dān),太小會(huì)導(dǎo)致極少有數(shù)據(jù)達(dá)到閾值,高級(jí)存儲(chǔ)空間存儲(chǔ)的數(shù)據(jù)較少,利用率低下),系統(tǒng)用于記錄統(tǒng)計(jì)次數(shù)的值v’,三維表生命周期變量記為t;7.根據(jù)用戶輸入的條件在數(shù)據(jù)庫(kù)中進(jìn)行第一次查詢;查詢過(guò)程中對(duì)某一個(gè)數(shù)據(jù)庫(kù)表和與之有關(guān)聯(lián)的表進(jìn)行多表關(guān)聯(lián)操作;需要說(shuō)明的是,管理大量數(shù)據(jù)的系統(tǒng)涉及的數(shù)據(jù)庫(kù)表一般有多個(gè),根據(jù)不同數(shù)據(jù)的類別設(shè)立,其中會(huì)根據(jù)某一些共有的項(xiàng)對(duì)多個(gè)表的數(shù)據(jù)進(jìn)行關(guān)聯(lián)。對(duì)某一個(gè)數(shù)據(jù)庫(kù)表進(jìn)行操作的時(shí)候,需要對(duì)與之有關(guān)聯(lián)的表進(jìn)行關(guān)聯(lián)操作。若用戶在系統(tǒng)中輸入第一次查詢條件進(jìn)行多個(gè)表關(guān)聯(lián)查詢,系統(tǒng)會(huì)根據(jù)sql語(yǔ)句在數(shù)據(jù)庫(kù)中進(jìn)行查詢,并將結(jié)果使用結(jié)果表呈現(xiàn)。查詢操作通過(guò)使用sql語(yǔ)句進(jìn)行,例如,對(duì)多個(gè)表的join查詢操作,輸入的一條sql語(yǔ)句根據(jù)條件關(guān)聯(lián)查詢多個(gè)表,會(huì)得到一張結(jié)果表。記第一次查詢結(jié)果表為tb1,表中橫向(x軸)為數(shù)據(jù)的各個(gè)屬性,記為a,b,c...;表中縱向(y軸)為tb1表中記錄的所有數(shù)據(jù),記為n1,n1的取值范圍為0至n1;將tb1表中的數(shù)據(jù)復(fù)制到臨時(shí)三維表結(jié)構(gòu)tb’中;8.將tb’中數(shù)據(jù)依次轉(zhuǎn)換成二進(jìn)制數(shù),記為x1,x2,x3…,并定義hash映射函數(shù);本發(fā)明中,hash映射函數(shù)定義為:f(x)=(x2div10p)mod10q。也可以自定義常用的hash映射函數(shù),本發(fā)明中使用平方取中法。其中q為二進(jìn)制數(shù)x的位數(shù),p為中間數(shù)字所在的位數(shù),即p=qdiv2,從二進(jìn)制中間取p位,即為映射結(jié)果f(x)。若二進(jìn)制數(shù)過(guò)短,則不取中,取所有位數(shù)。一般小于10位二進(jìn)制數(shù)不取中。例如,臨時(shí)三維表存儲(chǔ)“番茄,農(nóng)藥,1,2”字符串?dāng)?shù)據(jù),正式三維表存儲(chǔ)的是“番茄,農(nóng)藥,1,2”轉(zhuǎn)換成二進(jìn)制的結(jié)果,即臨時(shí)三維表結(jié)構(gòu)是查詢到的數(shù)據(jù),之后轉(zhuǎn)換成二進(jìn)制轉(zhuǎn)存到正式三維表中,再由hash函數(shù)計(jì)算映射不連續(xù)地存儲(chǔ)到低級(jí)存儲(chǔ)空間中。值得說(shuō)明的是,hash計(jì)算會(huì)產(chǎn)生沖突,本發(fā)明使用再hash算法,即產(chǎn)生沖突后,將產(chǎn)生沖突的二進(jìn)制再使用hash映射函數(shù)f(x)計(jì)算一次后映射,將數(shù)據(jù)經(jīng)過(guò)設(shè)定好的hash函數(shù)f(x),計(jì)算地址結(jié)果后依次填充到hash表tbhl中。9.將tb’中的數(shù)據(jù)連同hash表tbhl存入低級(jí)存儲(chǔ)空間中;10.若用戶是第二次進(jìn)行查詢(第二次輸入的查詢條件與第一次查詢不同),由于高級(jí)存儲(chǔ)空間中為空,系統(tǒng)會(huì)自動(dòng)到低級(jí)存儲(chǔ)空間的hash表tbhl中查找(hash表中存儲(chǔ)第一次查詢的條件,故容易得出低級(jí)存儲(chǔ)空間有沒(méi)有匹配數(shù)據(jù)),記低級(jí)存儲(chǔ)空間中匹配的數(shù)據(jù)為tb2’;若第二次查詢的條件與第一次條件相同,由于第一次查詢的已經(jīng)存儲(chǔ)到低級(jí)存儲(chǔ)空間中。第二次的查詢先查詢高級(jí)存儲(chǔ)空間是否有匹配情況(第二次查詢時(shí)高級(jí)存儲(chǔ)空間為空),再判斷低級(jí)存儲(chǔ)空間是否有匹配的情況,那么在時(shí)間復(fù)雜度為o(1)內(nèi)即可找到完全匹配,從而查詢到數(shù)據(jù)而跳出循環(huán);若不是第二次查詢(等同于次數(shù)v’>=v閾值的情況),則跳到步驟14;11.判斷tb2’是否完全包含了第二次查詢的所有數(shù)據(jù)(判斷是否包含直接判斷hash表中的條件是否完全匹配/一致即可),若完全包含則結(jié)束操作;否則執(zhí)行步驟12;當(dāng)hash表中條件和該查詢條件不是完全一致時(shí),說(shuō)明查找結(jié)果集未包含或未完全包含應(yīng)有的數(shù)據(jù)集。12.根據(jù)用戶輸入的條件進(jìn)入數(shù)據(jù)庫(kù)中查詢,此時(shí)記第二次查詢結(jié)果表為tb2,橫向(x軸)不變,縱向?yàn)閠b2表中記錄的所有數(shù)據(jù),記為n2,n2的取值范圍為0至n2;13.當(dāng)前查詢結(jié)果表(第二次查詢?yōu)閠b2)與之前的臨時(shí)三維表的結(jié)果tb’取并集,并集結(jié)果集更新到臨時(shí)三維表結(jié)構(gòu)tb’中;將臨時(shí)三維表tb’中的數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制,存儲(chǔ)到正式三維表tb中,記錄z軸數(shù)據(jù)為當(dāng)前次數(shù)閾值v’,對(duì)比v’與之前設(shè)定好的閾值v,若v’<v則繼續(xù)進(jìn)行步驟15,若v’>=v則進(jìn)行步驟14。值得說(shuō)明的是:(1)當(dāng)前查詢結(jié)果表(第二次查詢?yōu)閠b2)與之前的臨時(shí)三維表的結(jié)果tb’的數(shù)據(jù)是根據(jù)用戶輸入的條件查詢的,可能沒(méi)有交集部分,可能進(jìn)行不同表的關(guān)聯(lián)查詢,導(dǎo)致兩張表的屬性列不同。若兩張表具有共同主鍵的屬性列,則可將兩張表按照相同屬性列的方式重疊顯示,此方法有助于三維表的屬性擴(kuò)展,如圖2中的表ta與te;(2)如表2中所示,用戶可能根據(jù)不同的查詢條件生成的sql語(yǔ)句查詢不同的結(jié)果表,即ta與te所示,或ta與tf所示,由于x軸代表數(shù)據(jù)的各個(gè)屬性。即ta與te的陰影部分為兩個(gè)表共有的屬性列,ta與tf沒(méi)有共有的屬性列則并排存儲(chǔ)。表2hash映射編碼表(3)取并集的過(guò)程是把兩個(gè)表中的全部數(shù)據(jù)合并,將兩個(gè)表重復(fù)的數(shù)據(jù)去重,按照三維表中的z軸重復(fù)的次數(shù)記錄頻次,如表2陰影重疊的頻次數(shù);此時(shí)三維表中的數(shù)據(jù)總數(shù)記為n;14.將正式三維表tb中頻次超過(guò)v’的部分?jǐn)?shù)據(jù),再次使用hash函數(shù):f(x)=(x2div10p)mod10q計(jì)算地址并映射至高級(jí)存儲(chǔ)空間中,更新高級(jí)存儲(chǔ)空間中的hash表tbhh。同時(shí),映射過(guò)程遵循上述再hash方法,接著存儲(chǔ)過(guò)程結(jié)束,等待下一次讀取查詢操作。15.根據(jù)用戶讀取查詢的需求,用戶輸入條件第三次及之后的查詢,系統(tǒng)先到高級(jí)存儲(chǔ)空間的hash表tbhh中查詢(即匹配hash表中存儲(chǔ)的條件),若在高級(jí)存儲(chǔ)空間中匹配到數(shù)據(jù),記錄該數(shù)據(jù)集為tb3”...tbn”,若完全包含所有要查詢的數(shù)據(jù)則跳出結(jié)束,否則進(jìn)行步驟16。16.系統(tǒng)在高級(jí)存儲(chǔ)空間的hash表中查詢完畢后,到低級(jí)存儲(chǔ)空間的hash表tbhl中查詢(同樣為匹配hash表中存儲(chǔ)的條件),若在低級(jí)存儲(chǔ)空間中匹配到數(shù)據(jù),則記錄數(shù)據(jù)集為tb3’...tbn’,并與高級(jí)存儲(chǔ)空間中查詢到的數(shù)據(jù)集做并集操作,記并集結(jié)果依次為q3,...,qn(即q3=tb3”∪tb3’…qn=tbn”∪tbn’)。17.判斷并集結(jié)果q3...qn是否包含當(dāng)前查詢的所有數(shù)據(jù),若完全包含所有要查詢的數(shù)據(jù)則跳出循環(huán),結(jié)束操作,否則進(jìn)行步驟18。18.由于低、高存儲(chǔ)空間的hash表中存有查詢條件,系統(tǒng)會(huì)根據(jù)當(dāng)前用戶輸入的條件對(duì)sql語(yǔ)句進(jìn)行優(yōu)化重寫;本發(fā)明實(shí)施例有詳細(xì)例子說(shuō)明。19.根據(jù)新的sql語(yǔ)句進(jìn)入數(shù)據(jù)庫(kù)中查詢,此時(shí)記第三次至第n次的查詢結(jié)果表為tb3,...,tbn,橫向(x軸)不變,縱向?yàn)閠b2表中記錄的所有數(shù)據(jù),依次記為n3,…,nn;此次用戶查詢結(jié)果集合為低級(jí)存儲(chǔ)空間結(jié)果集、高級(jí)存儲(chǔ)空間結(jié)果集和當(dāng)前數(shù)據(jù)庫(kù)查詢結(jié)果集三者的并集結(jié)果,記為o3,…,on,即o3=q3∪tb3...on=qn∪tbn,并輸出結(jié)果;20.當(dāng)前查詢結(jié)果表tb3...tbn與之前的正式三維表的結(jié)果tb2...tbn-1取并集,并集結(jié)果集更新到臨時(shí)三維表結(jié)構(gòu)tb’中,將臨時(shí)三維表tb’中的數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制,存儲(chǔ)到正式三維表tb中,記錄z軸數(shù)據(jù)為當(dāng)前次數(shù)閾值v’,對(duì)比v與之前設(shè)定好的閾值v,若v’<v則繼續(xù)進(jìn)行步驟22.,若v’>=v則進(jìn)行步驟21.。21.將正式三維表中頻次超過(guò)v’的部分?jǐn)?shù)據(jù),再次使用hash函數(shù):f(x)=(x2div10p)mod10q計(jì)算地址并映射至高級(jí)存儲(chǔ)空間中,更新高級(jí)存儲(chǔ)空間中的hash表tbhh。同時(shí),映射過(guò)程遵循上述再hash方法。22.存儲(chǔ)過(guò)程結(jié)束;等待下一次讀取查詢操作,跳到步驟15。系統(tǒng)在運(yùn)行時(shí),時(shí)刻保證低、高存儲(chǔ)空間中hash表的生命周期。根據(jù)步驟6中定義的生命周期變量t,當(dāng)定時(shí)器從用戶發(fā)出第一次請(qǐng)求至生命周期時(shí),即0~t時(shí),系統(tǒng)會(huì)首先自動(dòng)清空高級(jí)存儲(chǔ)空間中的數(shù)據(jù)和hash表,同時(shí)將定時(shí)器清0;當(dāng)時(shí)間再次到達(dá)生命周期變量t時(shí),系統(tǒng)會(huì)再次清空高級(jí)存儲(chǔ)空間的數(shù)據(jù)和hash表,若此時(shí)高級(jí)存儲(chǔ)空間無(wú)數(shù)據(jù)與hash表,則會(huì)清空低級(jí)存儲(chǔ)空間的數(shù)據(jù)和hash表。此設(shè)定有效的避免了數(shù)據(jù)過(guò)多而導(dǎo)致的存儲(chǔ)空間溢出的問(wèn)題。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:本發(fā)明提供一種基于三維表結(jié)構(gòu)的數(shù)據(jù)關(guān)聯(lián)存取方法,對(duì)用戶發(fā)出的請(qǐng)求進(jìn)行解析,對(duì)若干數(shù)據(jù)庫(kù)表進(jìn)行關(guān)聯(lián)操作,并進(jìn)行讀取或存儲(chǔ)操作。具體地,本發(fā)明具有以下技術(shù)優(yōu)勢(shì):(一)傳統(tǒng)方法隨著用戶查詢次數(shù)的增加,讀取查詢的速度越來(lái)越慢;而采用本發(fā)明的方法,讀取查詢的速度隨著查詢次數(shù)的增加越來(lái)越快;(二)本發(fā)明極大地提高了系統(tǒng)存取數(shù)據(jù)的效率,其效率不會(huì)因?yàn)閿?shù)據(jù)量增大而給計(jì)算機(jī)帶來(lái)指數(shù)型增長(zhǎng)的壓力;(三)讀取查詢速度由設(shè)定的低存儲(chǔ)空間和高存儲(chǔ)空間、三維表頻次統(tǒng)計(jì)閾值和三維表定時(shí)清空變量共同決定,可由用戶自行定制,靈活性和智能性強(qiáng);(四)三維表結(jié)構(gòu)可以對(duì)多個(gè)相互之間有相同主鍵的數(shù)據(jù)庫(kù)表進(jìn)行關(guān)聯(lián)存儲(chǔ),具有很強(qiáng)的擴(kuò)展性;(五)低、高存儲(chǔ)空間中的hash表不僅存有三維表中數(shù)據(jù)的存儲(chǔ)地址,還存有查詢?nèi)S表時(shí)的條件;系統(tǒng)在檢查低、高存儲(chǔ)空間中是否含有之前查詢過(guò)的數(shù)據(jù)時(shí),只需查詢hash表中存儲(chǔ)的條件即可快速做出相應(yīng)。附圖說(shuō)明圖1為本發(fā)明提供方法的流程框圖。圖2為本發(fā)明中三維表結(jié)構(gòu)示意圖;其中,ta、tb、tc、td、te、tf為用戶發(fā)起的多次數(shù)據(jù)查詢的結(jié)果表,這些表在沒(méi)有順序之分,在實(shí)施例中根據(jù)用戶的條件可有順序之分;每一張表的x軸代表表的各個(gè)屬性列,y軸代表數(shù)據(jù)記錄數(shù)也可稱作數(shù)據(jù)條數(shù),z軸方向有重疊的部分就是數(shù)據(jù)重疊的部分,三維表中記錄重疊頻次是計(jì)算在z方向上重疊的次數(shù);如圖2所示,ta與tb的x方向上相同也就是說(shuō)明這兩張表查詢的數(shù)據(jù)屬性列是相同的;一般數(shù)據(jù)存儲(chǔ)不是連續(xù)的,所以兩張表中間空了一部分,平鋪顯示;tb,tc和td在x方向上和ta也相同,代表tb,tc和td三張表和ta查詢的數(shù)據(jù)的屬性列是相同的;但由于每次查詢得到的結(jié)果數(shù)據(jù)不同所有在顯示時(shí)交錯(cuò)顯示,重疊的部分代表共有的數(shù)據(jù)也就是發(fā)明中提到的交集部分;可以看到陰影重疊部分頻次記為3,tb和td,td和tc還有重疊頻次為2的部分難以表示,沒(méi)有在圖中標(biāo)識(shí);ta與te在x軸方向上不完全相同,但有重疊的部分代表有相同的屬性列,是根據(jù)該屬性列作為主鍵對(duì)ta與te兩個(gè)表進(jìn)行關(guān)聯(lián)存儲(chǔ)的;y軸方向上有重疊的部分代表有相同數(shù)量的數(shù)據(jù),這里也可以不同;同理ta和tf在x軸方向上不相同,沒(méi)有重疊部分代表兩張表不是關(guān)聯(lián)的,沒(méi)有共同的屬性列,三維表中,非關(guān)聯(lián)的數(shù)據(jù)在x軸方向上平鋪顯示存儲(chǔ),y軸代表數(shù)據(jù)量。圖3為本發(fā)明具體實(shí)施例中三維表的正視示意圖;圖4為本發(fā)明具體實(shí)施例中三維表的側(cè)視示意圖;其中,圖3~4相當(dāng)于節(jié)選展現(xiàn)了圖2中的幾個(gè)表;圖3中ta和te代表以農(nóng)產(chǎn)品名為共同屬性列即相同主鍵的關(guān)聯(lián)表數(shù)據(jù),ta存儲(chǔ)了多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)信息,te存儲(chǔ)了多個(gè)國(guó)家或地區(qū)農(nóng)產(chǎn)品分類信息。這兩張表是根據(jù)該屬性列作為主鍵對(duì)ta與te兩個(gè)表進(jìn)行關(guān)聯(lián)存儲(chǔ)的。圖5為本發(fā)明中由低級(jí)存儲(chǔ)空間至高級(jí)存儲(chǔ)空間的數(shù)據(jù)流向框圖。圖6為本發(fā)明具體實(shí)施例中使用與未使用兩級(jí)存儲(chǔ)空間存儲(chǔ)讀取方法所用的時(shí)間對(duì)比圖;其中,存儲(chǔ)讀取均使用系統(tǒng)隨機(jī)生成查詢條件,保證每次查詢的數(shù)據(jù)在100條至10000條之間;(a)為使用本發(fā)明中方法,但設(shè)置不同閾值,分別設(shè)置5和10,可以看到在查詢次數(shù)30次之前是閾值為5時(shí)速度快,30次之后一直到100次查詢時(shí)是閾值為10時(shí)速度快,實(shí)施例中做了詳細(xì)的對(duì)比分析;(b)為未使用本發(fā)明方法,即使用現(xiàn)有傳統(tǒng)方法直接查詢讀取數(shù)據(jù)和設(shè)置閾值5和10三者的對(duì)比,由于閾值為5和10的時(shí)間隨查詢次數(shù)的圖形變化較小,所以在(a)中把使用閾值的情況單獨(dú)列出,來(lái)區(qū)分這兩種方法,可以看到未使用本發(fā)明的方法的查詢時(shí)間隨著查詢次數(shù)的上升而增加得很快,呈多次冪上升,使用本發(fā)明方法則呈線性緩慢上升。具體實(shí)施方式下面結(jié)合附圖,通過(guò)實(shí)施例進(jìn)一步描述本發(fā)明,但不以任何方式限制本發(fā)明的范圍。本發(fā)明提供了一種基于三維表結(jié)構(gòu)的數(shù)據(jù)關(guān)聯(lián)存取方法,并將其應(yīng)用于管理多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)數(shù)據(jù)的系統(tǒng)中,可以較大地提高系統(tǒng)存取數(shù)據(jù)的效率。本發(fā)明方法可以應(yīng)用于普適情況下的管理系統(tǒng)的存取功能中,一般普適情況下的管理系統(tǒng)括應(yīng)用程序和數(shù)據(jù)庫(kù),而硬件部分包括存儲(chǔ)設(shè)備。應(yīng)用程序是編程實(shí)現(xiàn)的系統(tǒng),用于接收用戶指令,將指令轉(zhuǎn)換為相關(guān)機(jī)器語(yǔ)言和操作;數(shù)據(jù)庫(kù)是用來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù),一些常見(jiàn)的數(shù)據(jù)庫(kù),如oracle,sqlserver,mysql。另外農(nóng)藥殘留數(shù)據(jù)管理系統(tǒng)存儲(chǔ)功能的硬件部分包括存儲(chǔ)設(shè)備,存儲(chǔ)設(shè)備是用于儲(chǔ)存信息的設(shè)備,可為硬盤驅(qū)動(dòng)器(hdd),固態(tài)存儲(chǔ)器(ssd)或直接存儲(chǔ)器(dasd)。圖1為本發(fā)明提供方法的流程框圖。將本發(fā)明方法應(yīng)用于管理多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)數(shù)據(jù)的系統(tǒng),系統(tǒng)響應(yīng)用戶首次根據(jù)需求查詢所查詢的農(nóng)藥、農(nóng)產(chǎn)品或mrl標(biāo)準(zhǔn)信息請(qǐng)求,拆分成數(shù)據(jù)庫(kù)農(nóng)藥表、農(nóng)產(chǎn)品表和各國(guó)mrl標(biāo)準(zhǔn)表的關(guān)聯(lián)操作,讀取數(shù)據(jù)。申請(qǐng)兩層存儲(chǔ)空間用于存儲(chǔ)每次的查詢結(jié)果,定義頻次閾值和hash映射函數(shù),設(shè)計(jì)并構(gòu)建食品安全信息的三維表結(jié)構(gòu),將查詢的結(jié)果依次使用hash映射存儲(chǔ)到低級(jí)存儲(chǔ)空間中的三維表;統(tǒng)計(jì)各項(xiàng)重疊的頻次,超過(guò)閾值的數(shù)據(jù)則使用hash再次映射到高級(jí)存儲(chǔ)空間的三維表中。用戶發(fā)起第二次之后的讀取查詢操作先到高級(jí)存儲(chǔ)空間中的三維表中查詢,若無(wú)數(shù)據(jù)或未查詢完全則到低級(jí)存儲(chǔ)空間中的三維表中查詢,若再無(wú)數(shù)據(jù)或未查詢完全則到常規(guī)存儲(chǔ)空間中查詢,同時(shí)運(yùn)行hash映射存儲(chǔ)過(guò)程,以此循環(huán),單次數(shù)據(jù)流向如圖5所示。將本
發(fā)明內(nèi)容應(yīng)用于農(nóng)藥殘留數(shù)據(jù)管理系統(tǒng)中,實(shí)現(xiàn)了對(duì)農(nóng)藥信息、農(nóng)產(chǎn)品信息以及多個(gè)國(guó)家或地區(qū)農(nóng)藥殘留最大限量mrl標(biāo)準(zhǔn)信息多個(gè)關(guān)聯(lián)表結(jié)構(gòu)的有效管理,極大提高了存取的速度。使用多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)數(shù)據(jù)進(jìn)行驗(yàn)證,發(fā)現(xiàn)可以極大地提高系統(tǒng)運(yùn)作效率。本發(fā)明具體實(shí)施時(shí),多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)數(shù)據(jù)表如表1所示,含有農(nóng)藥名稱,中國(guó)mrl標(biāo)準(zhǔn)限量值,香港mrl標(biāo)準(zhǔn)限量值,美國(guó)mrl標(biāo)準(zhǔn)限量值,日本mrl標(biāo)準(zhǔn)限量值,歐盟mrl標(biāo)準(zhǔn)限量值,cac的mrl標(biāo)準(zhǔn)限量值,農(nóng)產(chǎn)品名等信息。表1實(shí)施例中多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)數(shù)據(jù)表示例農(nóng)藥數(shù)據(jù)庫(kù)表含有農(nóng)藥名,農(nóng)藥cas號(hào),農(nóng)藥用途,農(nóng)藥分子式,農(nóng)藥毒性等。農(nóng)產(chǎn)品數(shù)據(jù)庫(kù)表含有農(nóng)產(chǎn)品名,農(nóng)產(chǎn)品各級(jí)分類等。其中,農(nóng)藥數(shù)據(jù)表可以通過(guò)農(nóng)藥名稱作為主鍵與多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)數(shù)據(jù)表進(jìn)行關(guān)聯(lián),農(nóng)產(chǎn)品數(shù)據(jù)表可以通過(guò)農(nóng)產(chǎn)品名稱作為主鍵與多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)數(shù)據(jù)表進(jìn)行關(guān)聯(lián),日后可能還需要對(duì)其他屬性列進(jìn)行關(guān)聯(lián)表的擴(kuò)充操作。用戶可以對(duì)多個(gè)表關(guān)聯(lián)存儲(chǔ)操作。本實(shí)施例中,用戶重復(fù)查詢2014年mrl標(biāo)準(zhǔn)數(shù)據(jù),初始化三維表結(jié)構(gòu),建立一個(gè)正式三維表結(jié)構(gòu)tb,一個(gè)臨時(shí)三維表結(jié)構(gòu)tb’,并在存儲(chǔ)空間中申請(qǐng)兩級(jí)存儲(chǔ)空間,命名為低級(jí)、高級(jí)存儲(chǔ)空間,定義三維表統(tǒng)計(jì)數(shù)據(jù)重疊的頻次閾值(下稱閾值)v=3,生命周期變量t=100秒(s)。如圖2所示,x軸為農(nóng)藥mrl標(biāo)準(zhǔn)信息記錄的各個(gè)屬性(pesticidename,cnmrl,hkmrl,usamrl,jpnmrl,eurmrl,cacmrl,gbid,note,entryintoforce,expirydate,productname等,后期可擴(kuò)展),y軸為記錄的數(shù)據(jù)量,z軸為查詢結(jié)果次數(shù)。本實(shí)施例設(shè)定了四次查詢。第一次查詢條件為:農(nóng)產(chǎn)品番茄,查詢出的數(shù)據(jù)包含所有農(nóng)藥在番茄中施加的mrl標(biāo)準(zhǔn)數(shù)據(jù);其中肯定包含農(nóng)藥difenoconazole在番茄中的數(shù)據(jù),包括中國(guó)mrl=1,香港mrl=1,美國(guó)mrl=2,日本mrl標(biāo)準(zhǔn)=0.01,歐盟mrl=1,cac的mrl標(biāo)準(zhǔn)=0.5等其他mrl信息。第二次查詢條件為農(nóng)藥為difenoconazole,可想而知查詢到的是在農(nóng)藥difenoconazole施加下的所有農(nóng)產(chǎn)品的,其中包括difenoconazole在番茄中施加的數(shù)據(jù),包括中國(guó)mrl=1,香港mrl=1,美國(guó)mrl=2,日本mrl標(biāo)準(zhǔn)=0.01,歐盟mrl=1,cac的mrl標(biāo)準(zhǔn)=0.5等其他mrl信息。第三次查詢條件為中國(guó)mrl標(biāo)準(zhǔn)值大于等于3的數(shù)據(jù),可想而知數(shù)據(jù)農(nóng)藥difenoconazole,農(nóng)產(chǎn)品番茄,中國(guó)mrl=1,香港mrl=1,美國(guó)mrl=2,日本mrl標(biāo)準(zhǔn)=0.01,歐盟mrl=1,cac的mrl標(biāo)準(zhǔn)=0.5這條剛剛前兩次查詢均查到的數(shù)據(jù)不包含在這次查詢中,所以“農(nóng)藥difenoconazole,農(nóng)產(chǎn)品番茄,中國(guó)mrl=1,香港mrl=1,美國(guó)mrl=2,日本mrl標(biāo)準(zhǔn)=0.01,歐盟mrl=1,cac的mrl標(biāo)準(zhǔn)=0.5”這條數(shù)據(jù)查詢過(guò)的頻次記為2,同時(shí)第三次查詢到了很多其他的數(shù)據(jù),但這條不包含在此次查詢的范圍內(nèi)。同理,第四次查詢條件為日本mrl標(biāo)準(zhǔn)值小于0.05的數(shù)據(jù),那么前兩次同時(shí)查找到的數(shù)據(jù)“農(nóng)藥difenoconazole,農(nóng)產(chǎn)品番茄,中國(guó)mrl=1,香港mrl=1,美國(guó)mrl=2,日本mrl標(biāo)準(zhǔn)=0.01,歐盟mrl=1,cac的mrl標(biāo)準(zhǔn)=0.5”在這個(gè)范圍內(nèi),頻次應(yīng)該從2變?yōu)?。若用戶設(shè)置的閾值為3,那么這條數(shù)據(jù)已經(jīng)達(dá)到了閾值,這條數(shù)據(jù)接下來(lái)會(huì)被hash映射計(jì)算存儲(chǔ)地址并存儲(chǔ)到高級(jí)存儲(chǔ)空間中。在這里,上述查詢只是一種實(shí)例。每次查詢不一定有重疊的部分。根據(jù)用戶的查詢條件的細(xì)化,總有查詢結(jié)果重疊的部分。當(dāng)有重疊的部分,利用本發(fā)明方法進(jìn)行查詢的存儲(chǔ)讀取,即可提高查詢效率。以下詳細(xì)描述查詢過(guò)程:(一)例如,用戶第一次查詢條件為農(nóng)產(chǎn)分類為茄果類、農(nóng)藥為全部時(shí),系統(tǒng)第一次查詢結(jié)果表為tb1,表中橫向(x軸)為數(shù)據(jù)的各個(gè)屬性項(xiàng),查詢到的第一條數(shù)據(jù)為: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表中查詢出的數(shù)據(jù)總量,此處為216條記錄,將數(shù)據(jù)存儲(chǔ)到臨時(shí)三維表tb’中;(二)例如用戶第二次查詢條件為農(nóng)藥difenoconazole,農(nóng)產(chǎn)品為全部時(shí),系統(tǒng)首先根據(jù)上述發(fā)明方法的步驟,到高級(jí)存儲(chǔ)空間中查詢,由于第一次沒(méi)有數(shù)據(jù)寫入高級(jí)和低級(jí)存儲(chǔ)空間中,系統(tǒng)跳出,直接進(jìn)入常規(guī)存儲(chǔ)空間中進(jìn)行查詢,記錄查詢結(jié)果表為tb2,查詢到的第一條數(shù)據(jù)為: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表中數(shù)據(jù)總量,記為n2此處為18992條,同樣將數(shù)據(jù)存儲(chǔ)到臨時(shí)三維表tb’中;(三)在tb’存儲(chǔ)的時(shí)候需要將表tb1與表tb2按照相同的屬性數(shù)據(jù)列進(jìn)行取并集操作,值得說(shuō)明的是,取并集的過(guò)程是把兩個(gè)農(nóng)產(chǎn)品查詢結(jié)果表中的全部數(shù)據(jù)合并整合,將兩個(gè)表重復(fù)的數(shù)據(jù)去重,同時(shí)記錄重疊部分的頻次v’。圖3中的tb與tc的陰影部分為交集部分,即表示陰影部分的數(shù)據(jù)重復(fù)查詢了兩次,記錄頻次v’+1,如圖3所示,ta表與tb沒(méi)有重復(fù)的數(shù)據(jù),即平鋪存儲(chǔ);本實(shí)施例第一次與第二次查詢時(shí),數(shù)據(jù):difenoconazole,1,1,2,0.01,1,0.5,gb2763-2014,空,番茄,包含在兩次查詢中,即記錄該條數(shù)據(jù)的頻次為v’=2,其他記錄頻次為1。圖3為本發(fā)明具體實(shí)施例中三維表的正視示意圖;圖4為本發(fā)明具體實(shí)施例中三維表的側(cè)視示意圖;其中,圖3~4相當(dāng)于節(jié)選展現(xiàn)了圖2中的幾個(gè)表;圖3中ta和te代表以農(nóng)產(chǎn)品名為共同屬性列即相同主鍵的關(guān)聯(lián)表數(shù)據(jù),ta存儲(chǔ)了多個(gè)國(guó)家或地區(qū)mrl標(biāo)準(zhǔn)信息,te存儲(chǔ)了多個(gè)國(guó)家或地區(qū)農(nóng)產(chǎn)品分類信息。這兩張表是根據(jù)該屬性列作為主鍵對(duì)ta與te兩個(gè)表進(jìn)行關(guān)聯(lián)存儲(chǔ)的。用戶第一次查詢的條件是農(nóng)產(chǎn)分類為茄果類,農(nóng)藥為全部,查詢到的數(shù)據(jù)在三維表中如tb所示,y方向是數(shù)據(jù)量。第二次查詢條件是農(nóng)藥為difenoconazole,農(nóng)產(chǎn)品為全部,查詢到的數(shù)據(jù)在三維表中如tc所示存儲(chǔ)。兩者重疊的部分代表農(nóng)藥difenoconazole在所有茄果類水果的mrl標(biāo)準(zhǔn)數(shù)據(jù)。其中,實(shí)施例中數(shù)據(jù)“農(nóng)藥difenoconazole,農(nóng)產(chǎn)品番茄,中國(guó)mrl=1,香港mrl=1,美國(guó)mrl=2,日本mrl標(biāo)準(zhǔn)=0.01,歐盟mrl=1,cac的mrl標(biāo)準(zhǔn)=0.5”是重疊的數(shù)據(jù)之一。第三次的查詢條件為中國(guó)mrl標(biāo)準(zhǔn)值大于等于3的所有數(shù)據(jù),可知:“農(nóng)藥difenoconazole,農(nóng)產(chǎn)品番茄,中國(guó)mrl=1,香港mrl=1,美國(guó)mrl=2,日本mrl標(biāo)準(zhǔn)=0.01,歐盟mrl=1,cac的mrl標(biāo)準(zhǔn)=0.5”這條數(shù)據(jù)不在條件范圍內(nèi),但茄果類其他水果的數(shù)據(jù)可能在這個(gè)范圍內(nèi),陰影的部分表示滿足中國(guó)mrl標(biāo)準(zhǔn)值大于等于3的數(shù)據(jù),tb,tc,td重疊的部分頻次為3。(四)定義hash映射函數(shù)為:f(x)=(x2div10p)mod10q,其中q為二進(jìn)制數(shù)x的位數(shù),p為中間數(shù)字所在的位數(shù),即p=qdiv2,從二進(jìn)制中間取p位,即為映射結(jié)果f(x),小于10位的二進(jìn)制數(shù)不取中,取所有位數(shù);hash計(jì)算會(huì)產(chǎn)生沖突,本實(shí)施例同樣使用再hash算法,即產(chǎn)生沖突后,將產(chǎn)生沖突的二進(jìn)制再使用f(x)計(jì)算一次后映射;(五)將臨時(shí)三維表tb’中的數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制后使用hash映射函數(shù)計(jì)算,計(jì)算結(jié)果填充到正式三維表tb中,計(jì)算結(jié)果的地址和查詢條件,記為hash表tbhl,如表3的實(shí)例所示。根據(jù)地址將當(dāng)前tb’和tbhl存儲(chǔ)到低級(jí)存儲(chǔ)空間中。此時(shí),低級(jí)存儲(chǔ)空間中的應(yīng)該存儲(chǔ)了第一和第二次查詢所有的并集數(shù)據(jù),共計(jì)19207條數(shù)據(jù);表3實(shí)施例中hash表部分示意圖目標(biāo)名稱經(jīng)過(guò)hash函數(shù)計(jì)算出的存放地址番茄(農(nóng)產(chǎn)品)01000100000010010011010100101110100alachlor(農(nóng)藥)10000111000110101101111010100110110110001011010000001110110001002(中國(guó)mrl標(biāo)準(zhǔn)限量值)1002(香港mrl標(biāo)準(zhǔn)限量值)10000(100導(dǎo)致沖突,再hash計(jì)算一次)2(美國(guó)mrl標(biāo)準(zhǔn)限量值)100000000(100000導(dǎo)致沖突,再hash計(jì)算一次)1(日本mrl標(biāo)準(zhǔn)限量值)13(cac的mrl標(biāo)準(zhǔn)限量值)110(六)若用戶第三次根據(jù)mrl標(biāo)準(zhǔn)限量值來(lái)查詢數(shù)據(jù),輸入中國(guó)mrl標(biāo)準(zhǔn)大于等于3為條件時(shí),系統(tǒng)根據(jù)上述發(fā)明中的方法,先到高級(jí)存儲(chǔ)空間中進(jìn)行查詢,由于高級(jí)存儲(chǔ)空間中數(shù)據(jù)為空,則轉(zhuǎn)到低級(jí)存儲(chǔ)空間中查詢。(七)因?yàn)榈图?jí)存儲(chǔ)空間中的hash表tbhl中存有第一次和第二次的查詢條件,故直接匹配條件進(jìn)行數(shù)據(jù)的地址獲取即可,取到數(shù)據(jù)記為tb3’。(八)系統(tǒng)將剛剛查詢到數(shù)據(jù)的條件加入到sql語(yǔ)句中,自動(dòng)生成新的sql語(yǔ)句,在常規(guī)存儲(chǔ)空間中查詢,本次實(shí)施例中第三次的查詢sql語(yǔ)句為:select*fromdic_multinationalmrl_infowherecnmrl>=‘3’在低級(jí)存儲(chǔ)空間中匹配完畢后,加入新的條件更新sql語(yǔ)句為:select*fromdic_multinationalmrl_infowherecnmrl>=‘3’and(productclass?。健压悺痮rpesticidename?。健甦ifenoconazole’)系統(tǒng)根據(jù)新的sql語(yǔ)句到常規(guī)存儲(chǔ)空間中的數(shù)據(jù)庫(kù)表中查詢,查詢結(jié)果記為tb3,本實(shí)施例第一次、第二次和第三次查詢時(shí),數(shù)據(jù)為:difenoconazole,1,1,2,0.01,1,0.5,gb2763-2014,空,番茄;包含在兩次查詢中,在第三次查詢時(shí)未查詢,所以該條數(shù)據(jù)的頻次還為v’=2,同時(shí)頻次為2的數(shù)據(jù)為148條,在此不一一列舉。(九)系統(tǒng)第四次及之后的查詢結(jié)果均遵循先到高級(jí)存儲(chǔ)空間中的hash表中匹配條件查詢,記高級(jí)存儲(chǔ)空間的結(jié)果表為tb4”...tbn”,再到低級(jí)存儲(chǔ)空間中的hash表中匹配條件查詢,記低級(jí)存儲(chǔ)空間的結(jié)果表為tb4’...tbn’,兩者同次查詢的并集結(jié)果記為q4...qn。(十)依次判斷并集結(jié)果q4...qn是否包含所有要查詢的數(shù)據(jù),若q4...qn有一次全部包含要查詢的數(shù)據(jù)則輸出結(jié)束qm,代表該次并集結(jié)果包含了該次查詢的所有結(jié)果,即輸出qm為最終結(jié)果,若未完全包含則執(zhí)行下一步。(十一)例如用戶第四次要查詢?nèi)毡緈rl標(biāo)準(zhǔn)值小于0.5的數(shù)據(jù),此時(shí)sql語(yǔ)句為:select*fromdic_multinationalmrl_infowherejpnmrl<‘0.5’分析可知,前三次的查詢有重復(fù)的數(shù)據(jù),但也有未包含的數(shù)據(jù),系統(tǒng)在高存儲(chǔ)空間中查詢結(jié)果為tb4”,在低存儲(chǔ)空間中的查詢結(jié)果為tb4’,并集結(jié)果記為q4。在高、低存儲(chǔ)空間中匹配完畢后,加入新的條件更新sql語(yǔ)句為:select*fromdic_multinationalmrl_infowherejpnmrl<‘0.5’and(cnmrl>=‘3’orproductclass?。健压悺痮rpesticidename?。健甦ifenoconazole’)(十二)本實(shí)施例第一次、第二次、第三次和第四次查詢時(shí),數(shù)據(jù):difenoconazole,1,1,2,0.01,1,0.5,gb2763-2014,空,番茄,包含在第一、二、四次查詢中,在第三次查詢時(shí)未查詢,所以該條數(shù)據(jù)的頻次更新為v’=3,同時(shí)頻次為3的數(shù)據(jù)還有76條,在此不一一列舉。(十三)根據(jù)閾值設(shè)定的v=3,將這77條數(shù)據(jù)使用上述定義的hash函數(shù)計(jì)算地址后,連同查詢條件存儲(chǔ)到高級(jí)存儲(chǔ)空間中,計(jì)算過(guò)程同樣遵循再hash的設(shè)定。(十四)使用新sql語(yǔ)句到常規(guī)存儲(chǔ)空間的數(shù)據(jù)庫(kù)中查找,記結(jié)果為tb4,最終查詢結(jié)果為tb4∪q4;(十五)實(shí)施例中,當(dāng)查詢進(jìn)行到第六次時(shí),操作時(shí)間達(dá)到設(shè)定的生命周期變量t=100s,系統(tǒng)依次清除高級(jí)存儲(chǔ)空間和低級(jí)存儲(chǔ)空間的數(shù)據(jù)。之后的操作按照上述方法循環(huán)往復(fù)。實(shí)施例中,在高級(jí)存儲(chǔ)空間和低級(jí)存儲(chǔ)空間使用hash函數(shù)映射查找,各需查找一次,且時(shí)間復(fù)雜度為o(1),可以極大的提高系統(tǒng)的相應(yīng)速度。值得說(shuō)明的是,本發(fā)明中的查詢速度會(huì)隨著查詢次數(shù)的增加而近似線性的增長(zhǎng),而非傳統(tǒng)方法的多冪次線性上升(本實(shí)施例中測(cè)試的數(shù)據(jù)增長(zhǎng)速度在二次方到三次方之間)。使用查詢大數(shù)據(jù)驗(yàn)證系統(tǒng)提高效率的有效性:i.用戶重復(fù)查詢六個(gè)國(guó)家或地區(qū)(中國(guó),香港,美國(guó),日本,歐盟,國(guó)際食品法典委員會(huì))的農(nóng)產(chǎn)品信息、農(nóng)藥信息和各自mrl標(biāo)準(zhǔn)限量值,共計(jì)598條農(nóng)產(chǎn)品信息、2071條農(nóng)藥信息、328102條mrl標(biāo)準(zhǔn)數(shù)據(jù);ii.將上述存儲(chǔ)與讀取操作使用編程方法實(shí)現(xiàn),并在系統(tǒng)中加入定時(shí)器功能記錄生命周期變量;iii.初始化低級(jí)存儲(chǔ)空間到高級(jí)存儲(chǔ)空間的閾值,設(shè)置閾值為5和10,分別測(cè)試100次系統(tǒng)響應(yīng)時(shí)間并記錄,如圖6上圖(a)所示;iv.使用系統(tǒng)隨機(jī)生成查詢條件,保證每次查詢的數(shù)據(jù)量在100條至10000條之間;v.記錄不使用本發(fā)明中存儲(chǔ)與讀取方法分別測(cè)試100次不同數(shù)據(jù)時(shí)系統(tǒng)的響應(yīng)時(shí)間,并與iii步驟中的結(jié)果進(jìn)行對(duì)比,整體如如圖6下圖(b)所示。不同的查詢條件和查詢數(shù)據(jù)量可能對(duì)實(shí)施例測(cè)試結(jié)果有影響,但通過(guò)大致地對(duì)比分析可知,使用兩級(jí)的存儲(chǔ)空間和hash映射會(huì)比常規(guī)的方法節(jié)省較多時(shí)間,適用本發(fā)明的方法隨著查詢次數(shù)的上升查詢時(shí)間大致呈線性變化;而常規(guī)方法的查詢時(shí)間呈冪次上升趨勢(shì)。在0~30查詢次數(shù)時(shí),由于三維表中查詢數(shù)據(jù)的重疊部分,即沒(méi)有到達(dá)設(shè)定的閾值,這時(shí)數(shù)據(jù)還未寫入高級(jí)存儲(chǔ)空間,故30次之前的查詢,設(shè)定閾值為5會(huì)比設(shè)定為10速度快。但隨著查詢次數(shù)的增加,閾值為10的查詢速度會(huì)快于閾值為5的情況??傮w來(lái)說(shuō),兩者均極大提高存讀取效率,可以通過(guò)具體的使用需求設(shè)置本發(fā)明中統(tǒng)計(jì)頻次閾值與生命周期變量,進(jìn)一步提高效率。需要注意的是,公布實(shí)施例的目的在于幫助進(jìn)一步理解本發(fā)明,但是本領(lǐng)域的技術(shù)人員可以理解:在不脫離本發(fā)明及所附權(quán)利要求的精神和范圍內(nèi),各種替換和修改都是可能的。因此,本發(fā)明不應(yīng)局限于實(shí)施例所公開(kāi)的內(nèi)容,本發(fā)明要求保護(hù)的范圍以權(quán)利要求書界定的范圍為準(zhǔn)。當(dāng)前第1頁(yè)12