• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于內(nèi)存表的人員信息系統(tǒng)綜合查詢優(yōu)化

      2019-06-20 01:34彭起
      科技視界 2019年12期

      【摘 要】本文主要面向人員檢索系統(tǒng)中數(shù)據(jù)查詢的優(yōu)化問題。該優(yōu)化算法將人員檢索數(shù)據(jù)庫綜合查詢速度從分鐘級優(yōu)化至秒級。同時解決查詢結(jié)果集組合、去重等一系列問題。為提高用戶使用體驗極大提高。

      【關(guān)鍵詞】內(nèi)存表;人員信息系統(tǒng);綜合查詢優(yōu)化

      中圖分類號: TP311.52 文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2019)12-0236-002

      DOI:10.19694/j.cnki.issn2095-2457.2019.12.114

      1 問題引出

      在實(shí)際的人員檢索系統(tǒng)中,對于全庫檢索時間效率的問題,一直是困擾開發(fā)者的難題。在我實(shí)際做項目過程中,我在做人員信息系統(tǒng)全庫檢索時,發(fā)現(xiàn)由于數(shù)據(jù)分散組織的原因,導(dǎo)致查詢速度異常緩慢。查詢速度緩慢給用戶帶來的體驗是極其糟糕的。劉芬[1]、楊瑩鵑[2]等做了關(guān)于優(yōu)化查詢規(guī)則、查詢邏輯等方面工作。本文將在借鑒其成果基礎(chǔ)上,通過優(yōu)化數(shù)據(jù)庫中數(shù)據(jù)組織、存儲方式來優(yōu)化查詢。在仔細(xì)分析系統(tǒng)架構(gòu)之后,對系統(tǒng)架構(gòu)做大調(diào)整,同時提出基于內(nèi)存表的綜合查詢算法。以此來大幅度提高綜合查詢速度。本文所有涉及到數(shù)據(jù)表均是基于MySQL數(shù)據(jù)庫。所有涉及到的算法均采用PHP語言進(jìn)行設(shè)計。

      2 相關(guān)概念解釋辨析及其應(yīng)用條件

      2.1 內(nèi)存表與臨時表

      內(nèi)存表是指存放在內(nèi)存中的表,所使用的內(nèi)存大小可以通過相關(guān)的配置文件進(jìn)行配置。與內(nèi)存表相關(guān)的,需要區(qū)分一個概念,臨時表。臨時表也是存放在內(nèi)存中,臨時表的內(nèi)存也通過相關(guān)配置文件進(jìn)行配置。當(dāng)數(shù)據(jù)超出臨時表最大值限制時,數(shù)據(jù)將自動轉(zhuǎn)為磁盤表,而內(nèi)存表相應(yīng)的會提示數(shù)據(jù)溢出錯誤。

      2.2 內(nèi)存表使用說明

      MySQL內(nèi)存表的容量受兩個參數(shù)限制,分別是:“max_heap_table_size”和“max_rows”。也可以將“max_rows”類似參數(shù)的設(shè)定放在數(shù)據(jù)庫的存儲引擎之后。同時在使用之前,仍需修改“my.ini”文件中的相關(guān)配置項。具體是“max_heap_table_size”和“max_rows”。經(jīng)過修改之后,創(chuàng)建數(shù)據(jù)庫表時將存儲引擎改為“MEMORY”即可。

      3 算法設(shè)計過程

      3.1 創(chuàng)建內(nèi)存索引表

      綜合查詢時,由于需要多次訪問全庫索引表,導(dǎo)致頻繁“IO”請求,從而大大降低檢索速度。同時,數(shù)據(jù)管理系統(tǒng)的數(shù)據(jù)類型眾多,數(shù)據(jù)分散組織,碎片化較為嚴(yán)重,特將數(shù)據(jù)按照數(shù)據(jù)類型進(jìn)行分類存儲。一個數(shù)據(jù)類型一張表,每一張表的關(guān)鍵字信息存入內(nèi)存索引表。為提高檢索獨(dú)特,為內(nèi)存表建立索引。同時將表名相關(guān)信息存入索引表中,方便后期查詢時對表進(jìn)行定位。

      3.2 傳入?yún)?shù)分析

      本系統(tǒng)數(shù)據(jù)根據(jù)不同類型分散組織數(shù)據(jù)表,設(shè)計有近一百多種數(shù)據(jù)類型,每種數(shù)據(jù)類型中會涉及到人名、身份證號等信息。根據(jù)本信息系統(tǒng)數(shù)據(jù)表的組織方式,進(jìn)行綜合查詢時,需傳入以下參數(shù):一級分類ID;二級分類ID;年份;關(guān)鍵字一;關(guān)鍵字二;關(guān)鍵字三等等。

      3.3 算法過程詳述

      根據(jù)調(diào)用程序傳入的參數(shù)(見3.2),將一級分類ID、二級分類ID、年份三個數(shù)據(jù)集合做笛卡爾積,確定所有可能的“數(shù)據(jù)類型-年份”組合。遍歷做好的笛卡爾積,對于每一個記錄,通過一級分類ID、二級分類ID、年份組合查詢條件到索引表中查詢是否對應(yīng)有數(shù)據(jù)庫表。當(dāng)數(shù)據(jù)表不存在時,隨機(jī)跳出本次循環(huán),開始下一次循環(huán)。如果數(shù)據(jù)表存在,則可以拿到數(shù)據(jù)表的表名。得到數(shù)據(jù)表之后,再次根據(jù)關(guān)鍵字一、關(guān)鍵字二其中的一個或兩個或其組合作為查詢條件模糊查詢對應(yīng)數(shù)據(jù)庫表。通過上述步驟即可確定查詢結(jié)果集。同時,每一張表查詢出的結(jié)果集合并,并將數(shù)據(jù)類別作為返回結(jié)果集的一個元素。詳細(xì)的算法見算法框圖一。

      算法框圖一

      3.4 查詢結(jié)果集去重

      去重操作相對簡單。PHP自身帶有“unique”函數(shù),可作為去重的直接系統(tǒng)方法。但是由于返回結(jié)果集的結(jié)構(gòu)相對復(fù)雜,所以單單使用“unique”函數(shù)是遠(yuǎn)遠(yuǎn)不能滿足去重需要的。對于一個結(jié)果集,如果進(jìn)行多重“for”循環(huán),對每一種數(shù)據(jù)類型編寫去重算法,則工作量過大,而且容易出錯。如果進(jìn)行的“for”循環(huán)層數(shù)太少,則無法完成去重操作。經(jīng)過反復(fù)實(shí)驗,最終確定為,采用二重“for”循環(huán),并結(jié)合“unique”函數(shù)進(jìn)行去重。經(jīng)過反復(fù)實(shí)驗,與優(yōu)化之前相比,查詢時間效率大大提高。目前,綜合查詢的相應(yīng)時間在兩秒中之內(nèi)。

      3.5 查詢結(jié)果集返回

      在以上所有步驟進(jìn)行完之后,即可對數(shù)據(jù)進(jìn)行返回。在PHP中,數(shù)據(jù)集通常以“JSON”方式進(jìn)行返回。用語句“echo json_encode($list,JSON_UNESCAPED_UNICODE)”返回數(shù)據(jù)集。至此,算法設(shè)計過程結(jié)束。

      4 結(jié)束語

      本文通過做數(shù)據(jù)庫索引表放入內(nèi)存存儲、數(shù)據(jù)分類型存儲、參數(shù)優(yōu)化、查詢過程優(yōu)化、查詢結(jié)果組合和去重等方式,大幅度提高綜合查詢的效率。經(jīng)過反復(fù)測試,查詢時間由原先的分鐘級別降低至現(xiàn)在的兩秒之內(nèi)。可以看出,將多種類型的數(shù)據(jù)分類型存儲,并建立系統(tǒng)內(nèi)存索引表。同時優(yōu)化傳入?yún)?shù)等方式,其查詢效率將大大提高。在后面做人員信息檢索系統(tǒng)時,也可將本文中提到的算法做好的借鑒。在此算法基礎(chǔ)上,經(jīng)過更高層次的優(yōu)化,其查詢效率也將會大幅度提高。

      【參考文獻(xiàn)】

      [1]劉芬.數(shù)據(jù)庫管理系統(tǒng)中查詢優(yōu)化的設(shè)計和實(shí)現(xiàn)[J].信息安全與技術(shù),2014,5(2):82-84.

      [2]楊瑩鵑.數(shù)據(jù)庫管理系統(tǒng)中查詢優(yōu)化的設(shè)計與實(shí)現(xiàn)[J].電腦知識與技術(shù),1009-3044(2018)25-0014-03.

      作者簡介:彭起(1998.01—),河南開封人,河南大學(xué)計算機(jī)與信息工程學(xué)院,本科在讀。

      金秀| 博野县| 综艺| 全州县| 巢湖市| 牙克石市| 曲水县| 修武县| 乡宁县| 安远县| 富蕴县| 卫辉市| 陈巴尔虎旗| 益阳市| 吉木萨尔县| 文昌市| 辽中县| 老河口市| 清远市| 白沙| 孟津县| 本溪市| 贵溪市| 拉孜县| 平乡县| 承德市| 乳山市| 扶风县| 瓮安县| 芦溪县| 永嘉县| 福鼎市| 伊通| 威信县| 南川市| 莱西市| 甘洛县| 茶陵县| 荔浦县| 宣汉县| 常熟市|