基于Postgresql的大字段特值索引系統(tǒng)與方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機技術(shù)領(lǐng)域,具體涉及一種基于Postgresql的大字段特值索引系統(tǒng)與方法。
【背景技術(shù)】
[0002]隨著大數(shù)據(jù)時代的到來,數(shù)以億計的數(shù)據(jù)被存入到數(shù)據(jù)庫中,大字段數(shù)據(jù)也不斷的出現(xiàn)在我們眼前。然而大字段數(shù)據(jù)中有時會包含特殊的一些信息,因此對這些特殊的字符建立索引也成為了我們研究中的重要內(nèi)容。
[0003]特殊字符索引在商業(yè)型數(shù)據(jù)管理系統(tǒng)中是非常常用的,因為它可以提高數(shù)據(jù)的檢索效率,在沒有索引的時候我們一般都用like子句來匹配我們搜索的關(guān)鍵詞,like子句執(zhí)行的效率是非常低的,這嚴重影響了系統(tǒng)的運行速度。因此特殊字符索引就可以調(diào)高數(shù)據(jù)的檢索效率。特殊字符索引是為我們需要被用戶檢索的信息進行創(chuàng)建索引,獨立的存儲在一個表中或者是一個字段上面。
[0004]Postgresql數(shù)據(jù)庫為“大字段”的物理存儲提供了 TOAST功能,通過核實的配置策略能夠減少10次數(shù)和掃描塊數(shù),進而提升查詢速度。
[0005]Postgresql采用固定頁面大小(通常是8kb),元組不能跨越多個頁面,無法時間“大字段值”的直接存儲。T0AST提供解決方法,允許大的字段值被壓縮或分裂為多個物理行。Postgresql只為部分數(shù)據(jù)類型提供TOAST支持,為支持T0AST,數(shù)據(jù)類型必須是變長(varlena)的類型,前32位存儲著以字節(jié)的數(shù)值總長度(包括長度本身)。
[0006]T0AST采用最高的兩個二進制位用于標識壓縮與行外存儲,因此“大字段”的邏輯長度被限制在了 1GB ( 2 ~ ( 32 - 2 ) - lbytes)。
[0007]相對直接的存儲方式來說,數(shù)據(jù)經(jīng)過T0AST方式后,單個或者連續(xù)數(shù)據(jù)塊中能夠存儲更多的數(shù)據(jù)值,對于訪問非“大字段”時,能夠大量減少掃描塊數(shù)或者屋里10次數(shù);對于極少訪問的含“大字段”記錄,經(jīng)過手動修改存儲屬性,采用T0AST方式,即使小雨2K的情況下同樣能夠帶來很好的效果。
[0008]雖然大字段存儲的問題在Postgresql數(shù)據(jù)庫中已得到解決,然而我們平時并不會對“大字段”中的所有數(shù)據(jù)感興趣,所以對“大字段”數(shù)據(jù)中的一些特殊字符建立索引是一項首當其沖的方法。
【發(fā)明內(nèi)容】
[0009]為了解決現(xiàn)有技術(shù)中Postgresql數(shù)據(jù)庫大字段特值索引慢的問題,本發(fā)明公開了一種基于Postgresql的大字段特值索引系統(tǒng)與方法,可實現(xiàn)Postgresql數(shù)據(jù)庫大字段特值的快速索引。
[0010]本發(fā)明的目的是這樣實現(xiàn)的:
基于Postgresql的大字段特值索引系統(tǒng),包括以下模塊:
語言轉(zhuǎn)換模塊:用于對當前文檔字段加內(nèi)置轉(zhuǎn)換函數(shù),將當前文檔字段轉(zhuǎn)換成能夠被索引的語言;
索引建立模塊:用于基于被轉(zhuǎn)換后的語言,對待索引字符建立索引表,所述的索引表包括待索引字符和該字符在原始數(shù)據(jù)中的位置;
索引模塊:用于在索引表中查找所需查找字符,找到所需查找字符在原始數(shù)據(jù)中的位置。
[0011]上述基于Postgresql的大字段特值索引系統(tǒng),還包括觸發(fā)模塊:用于使新的待索引字符和該字符在原始數(shù)據(jù)中的位置進入索引表。
[0012]基于Postgresql的大字段特值索引方法,包括以下步驟:
501、對當前文檔字段加內(nèi)置轉(zhuǎn)換函數(shù),將當前文檔字段轉(zhuǎn)換成能夠被索引的語言;
502、基于被轉(zhuǎn)換后的語言,對待索引字符建立索引表,所述的索引表包括待索引字符和該字符在原始數(shù)據(jù)中的位置;
503、在索引表中查找所需查找字符,找到所需查找字符在原始數(shù)據(jù)中的位置。
[0013]上述基于Postgresql的大字段特值索引方法,設(shè)置觸發(fā)器,使新的待索引字符和該字符在原始數(shù)據(jù)中的位置進入索引表。
[0014]有益效果:
本發(fā)明可以實現(xiàn)對Postgresql數(shù)據(jù)庫中大字段特殊字符的快速索引,解決了現(xiàn)有技術(shù)中索引較慢的問題。
【附圖說明】
[0015]圖1是基于Postgresql的大字段特值索引系統(tǒng)示意圖。
[0016]圖2是基于Postgresql的大字段特值索引方法流程圖。
【具體實施方式】
[0017]下面對本發(fā)明【具體實施方式】作進一步詳細描述。
[0018]具體實施例一
本實施例為基于Postgresql的大字段特值索引系統(tǒng)的實施例。
[0019]本實施例的基于Postgresql的大字段特值索引系統(tǒng),示意圖如圖1所示。該系統(tǒng)包括以下模塊:
語言轉(zhuǎn)換模塊:用于對當前文檔字段加內(nèi)置轉(zhuǎn)換函數(shù),將當前文檔字段轉(zhuǎn)換成能夠被索引的語言;
索引建立模塊:用于基于被轉(zhuǎn)換后的語言,對待索引字符建立索引表,所述的索引表包括待索引字符和該字符在原始數(shù)據(jù)中的位置;
索引模塊:用于在索引表中查找所需查找字符,找到所需查找字符在原始數(shù)據(jù)中的位置。
[0020]具體實施例二
本實施例為基于Postgresql的大字段特值索引系統(tǒng)的實施例。
[0021]本實施例的基于Postgresql的大字段特值索引系統(tǒng),在具體實施例一的基礎(chǔ)上,進一步限定還包括觸發(fā)模塊:用于使新的待索引字符和該字符在原始數(shù)據(jù)中的位置進入索引表。
[0022]具體實施例三
本實施例為基于Postgresql的大字段特值索引方法的實施例。
[0023]本實施例的基于Postgresql的大字段特值索引方法,流程圖如圖2所示。該方法包括以下步驟:
501、對當前文檔字段加內(nèi)置轉(zhuǎn)換函數(shù),將當前文檔字段轉(zhuǎn)換成能夠被索引的語言;
502、基于被轉(zhuǎn)換后的語言,對待索引字符建立索引表,所述的索引表包括待索引字符和該字符在原始數(shù)據(jù)中的位置;
503、在索引表中查找所需查找字符,找到所需查找字符在原始數(shù)據(jù)中的位置。
[0024]具體實施例四
本實施例為基于Postgresql的大字段特值索引方法的實施例。
[0025]本實施例的基于Postgresql的大字段特值索引方法,在具體實施例三的基礎(chǔ)上,進一步限定設(shè)置觸發(fā)器,使新的待索引字符和該字符在原始數(shù)據(jù)中的位置進入索引表。
[0026]需要說明的是,并不是所有的語言或文檔字段都可以被快速索引,想實現(xiàn)快速索引,必須要在特定的語言下才能進行,因此需要將非可快速索引的語言轉(zhuǎn)換成可實現(xiàn)快速實現(xiàn)索引的語言。這項工作由語言轉(zhuǎn)換模塊完成,對當前文檔字段加內(nèi)置轉(zhuǎn)換函數(shù);
為了實現(xiàn)快速索引,必須要避免索引其它不應(yīng)該被索引的信息,因此,需要將待索引信息單獨建立列表,新列表中不包含任何無需被索引的信息,因此可實現(xiàn)快速索引。這項工作由索引建立模塊完成,建立新的索引表;
為了新的待索引字符能夠被索引,必須要求該字符和其在原始數(shù)據(jù)中的位置進入索引表,觸發(fā)器的功能就是使新的待索引字符和該字符在原始數(shù)據(jù)中的位置進入索引表。
【主權(quán)項】
1.基于Postgresql的大字段特值索引系統(tǒng),其特征在于,包括以下模塊: 語言轉(zhuǎn)換模塊:用于對當前文檔字段加內(nèi)置轉(zhuǎn)換函數(shù),將當前文檔字段轉(zhuǎn)換成能夠被索引的語言; 索引建立模塊:用于基于被轉(zhuǎn)換后的語言,對待索引字符建立索引表,所述的索引表包括待索引字符和該字符在原始數(shù)據(jù)中的位置; 索引模塊:用于在索引表中查找所需查找字符,找到所需查找字符在原始數(shù)據(jù)中的位置。2.根據(jù)權(quán)利要求1所述的基于Postgresql的大字段特值索引系統(tǒng),其特征在于,還包括觸發(fā)模塊:用于使新的待索引字符和該字符在原始數(shù)據(jù)中的位置進入索引表。3.基于Postgresql的大字段特值索引方法,其特征在于,包括以下步驟: 501、對當前文檔字段加內(nèi)置轉(zhuǎn)換函數(shù),將當前文檔字段轉(zhuǎn)換成能夠被索引的語言; 502、基于被轉(zhuǎn)換后的語言,對待索引字符建立索引表,所述的索引表包括待索引字符和該字符在原始數(shù)據(jù)中的位置; 503、在索引表中查找所需查找字符,找到所需查找字符在原始數(shù)據(jù)中的位置。4.根據(jù)權(quán)利要求3所述的基于Postgresql的大字段特值索引方法,其特征在于,設(shè)置觸發(fā)器,使新的待索引字符和該字符在原始數(shù)據(jù)中的位置進入索引表。
【專利摘要】本發(fā)明屬于計算機技術(shù)領(lǐng)域,具體涉及一種基于Postgresql的大字段特值索引系統(tǒng)與方法;該方法首先對當前文檔字段加內(nèi)置轉(zhuǎn)換函數(shù),將當前文檔字段轉(zhuǎn)換成能夠被索引的語言,然后基于被轉(zhuǎn)換后的語言,對待索引字符建立索引表,所述的索引表包括待索引字符和該字符在原始數(shù)據(jù)中的位置,最后在索引表中查找所需查找字符,找到所需查找字符在原始數(shù)據(jù)中的位置;該系統(tǒng)包括用于執(zhí)行上述操作的語言轉(zhuǎn)換模塊,索引建立模塊和索引模塊;本發(fā)明基于Postgresql的大字段特值索引系統(tǒng)與方法,可以解決現(xiàn)有技術(shù)中Postgresql數(shù)據(jù)庫大字段特值索引慢的問題,實現(xiàn)Postgresql數(shù)據(jù)庫大字段特值的快速索引。
【IPC分類】G06F17/30
【公開號】CN105488087
【申請?zhí)枴緾N201410844962
【發(fā)明人】梁志超, 孫晉超, 張栗偉
【申請人】哈爾濱安天科技股份有限公司
【公開日】2016年4月13日
【申請日】2014年12月31日