基于Postgresql的大字段特值索引系统与方法
【技术领域】
[0001]本发明属于计算机技术领域,具体涉及一种基于Postgresql的大字段特值索引系统与方法。
【背景技术】
[0002]随着大数据时代的到来,数以亿计的数据被存入到数据库中,大字段数据也不断的出现在我们眼前。然而大字段数据中有时会包含特殊的一些信息,因此对这些特殊的字符建立索引也成为了我们研究中的重要内容。
[0003]特殊字符索引在商业型数据管理系统中是非常常用的,因为它可以提高数据的检索效率,在没有索引的时候我们一般都用like子句来匹配我们搜索的关键词,like子句执行的效率是非常低的,这严重影响了系统的运行速度。因此特殊字符索引就可以调高数据的检索效率。特殊字符索引是为我们需要被用户检索的信息进行创建索引,独立的存储在一个表中或者是一个字段上面。
[0004]Postgresql数据库为“大字段”的物理存储提供了 TOAST功能,通过核实的配置策略能够减少10次数和扫描块数,进而提升查询速度。
[0005]Postgresql采用固定页面大小(通常是8kb),元组不能跨越多个页面,无法时间“大字段值”的直接存储。T0AST提供解决方法,允许大的字段值被压缩或分裂为多个物理行。Postgresql只为部分数据类型提供TOAST支持,为支持T0AST,数据类型必须是变长(varlena)的类型,前32位存储着以字节的数值总长度(包括长度本身)。
[0006]T0AST采用最高的两个二进制位用于标识压缩与行外存储,因此“大字段”的逻辑长度被限制在了 1GB ( 2 ~ ( 32 - 2 ) - lbytes)。
[0007]相对直接的存储方式来说,数据经过T0AST方式后,单个或者连续数据块中能够存储更多的数据值,对于访问非“大字段”时,能够大量减少扫描块数或者屋里10次数;对于极少访问的含“大字段”记录,经过手动修改存储属性,采用T0AST方式,即使小雨2K的情况下同样能够带来很好的效果。
[0008]虽然大字段存储的问题在Postgresql数据库中已得到解决,然而我们平时并不会对“大字段”中的所有数据感兴趣,所以对“大字段”数据中的一些特殊字符建立索引是一项首当其冲的方法。
【发明内容】
[0009]为了解决现有技术中Postgresql数据库大字段特值索引慢的问题,本发明公开了一种基于Postgresql的大字段特值索引系统与方法,可实现Postgresql数据库大字段特值的快速索引。
[0010]本发明的目的是这样实现的:
基于Postgresql的大字段特值索引系统,包括以下模块:
语言转换模块:用于对当前文档字段加内置转换函数,将当前文档字段转换成能够被索引的语言;
索引建立模块:用于基于被转换后的语言,对待索引字符建立索引表,所述的索引表包括待索引字符和该字符在原始数据中的位置;
索引模块:用于在索引表中查找所需查找字符,找到所需查找字符在原始数据中的位置。
[0011]上述基于Postgresql的大字段特值索引系统,还包括触发模块:用于使新的待索引字符和该字符在原始数据中的位置进入索引表。
[0012]基于Postgresql的大字段特值索引方法,包括以下步骤:
501、对当前文档字段加内置转换函数,将当前文档字段转换成能够被索引的语言;
502、基于被转换后的语言,对待索引字符建立索引表,所述的索引表包括待索引字符和该字符在原始数据中的位置;
503、在索引表中查找所需查找字符,找到所需查找字符在原始数据中的位置。
[0013]上述基于Postgresql的大字段特值索引方法,设置触发器,使新的待索引字符和该字符在原始数据中的位置进入索引表。
[0014]有益效果:
本发明可以实现对Postgresql数据库中大字段特殊字符的快速索引,解决了现有技术中索引较慢的问题。
【附图说明】
[0015]图1是基于Postgresql的大字段特值索引系统示意图。
[0016]图2是基于Postgresql的大字段特值索引方法流程图。
【具体实施方式】
[0017]下面对本发明【具体实施方式】作进一步详细描述。
[0018]具体实施例一
本实施例为基于Postgresql的大字段特值索引系统的实施例。
[0019]本实施例的基于Postgresql的大字段特值索引系统,示意图如图1所示。该系统包括以下模块:
语言转换模块:用于对当前文档字段加内置转换函数,将当前文档字段转换成能够被索引的语言;
索引建立模块:用于基于被转换后的语言,对待索引字符建立索引表,所述的索引表包括待索引字符和该字符在原始数据中的位置;
索引模块:用于在索引表中查找所需查找字符,找到所需查找字符在原始数据中的位置。
[0020]具体实施例二
本实施例为基于Postgresql的大字段特值索引系统的实施例。
[0021]本实施例的基于Postgresql的大字段特值索引系统,在具体实施例一的基础上,进一步限定还包括触发模块:用于使新的待索引字符和该字符在原始数据中的位置进入索引表。
[0022]具体实施例三
本实施例为基于Postgresql的大字段特值索引方法的实施例。
[0023]本实施例的基于Postgresql的大字段特值索引方法,流程图如图2所示。该方法包括以下步骤:
501、对当前文档字段加内置转换函数,将当前文档字段转换成能够被索引的语言;
502、基于被转换后的语言,对待索引字符建立索引表,所述的索引表包括待索引字符和该字符在原始数据中的位置;
503、在索引表中查找所需查找字符,找到所需查找字符在原始数据中的位置。
[0024]具体实施例四
本实施例为基于Postgresql的大字段特值索引方法的实施例。
[0025]本实施例的基于Postgresql的大字段特值索引方法,在具体实施例三的基础上,进一步限定设置触发器,使新的待索引字符和该字符在原始数据中的位置进入索引表。
[0026]需要说明的是,并不是所有的语言或文档字段都可以被快速索引,想实现快速索引,必须要在特定的语言下才能进行,因此需要将非可快速索引的语言转换成可实现快速实现索引的语言。这项工作由语言转换模块完成,对当前文档字段加内置转换函数;
为了实现快速索引,必须要避免索引其它不应该被索引的信息,因此,需要将待索引信息单独建立列表,新列表中不包含任何无需被索引的信息,因此可实现快速索引。这项工作由索引建立模块完成,建立新的索引表;
为了新的待索引字符能够被索引,必须要求该字符和其在原始数据中的位置进入索引表,触发器的功能就是使新的待索引字符和该字符在原始数据中的位置进入索引表。
【主权项】
1.基于Postgresql的大字段特值索引系统,其特征在于,包括以下模块: 语言转换模块:用于对当前文档字段加内置转换函数,将当前文档字段转换成能够被索引的语言; 索引建立模块:用于基于被转换后的语言,对待索引字符建立索引表,所述的索引表包括待索引字符和该字符在原始数据中的位置; 索引模块:用于在索引表中查找所需查找字符,找到所需查找字符在原始数据中的位置。2.根据权利要求1所述的基于Postgresql的大字段特值索引系统,其特征在于,还包括触发模块:用于使新的待索引字符和该字符在原始数据中的位置进入索引表。3.基于Postgresql的大字段特值索引方法,其特征在于,包括以下步骤: 501、对当前文档字段加内置转换函数,将当前文档字段转换成能够被索引的语言; 502、基于被转换后的语言,对待索引字符建立索引表,所述的索引表包括待索引字符和该字符在原始数据中的位置; 503、在索引表中查找所需查找字符,找到所需查找字符在原始数据中的位置。4.根据权利要求3所述的基于Postgresql的大字段特值索引方法,其特征在于,设置触发器,使新的待索引字符和该字符在原始数据中的位置进入索引表。
【专利摘要】本发明属于计算机技术领域,具体涉及一种基于Postgresql的大字段特值索引系统与方法;该方法首先对当前文档字段加内置转换函数,将当前文档字段转换成能够被索引的语言,然后基于被转换后的语言,对待索引字符建立索引表,所述的索引表包括待索引字符和该字符在原始数据中的位置,最后在索引表中查找所需查找字符,找到所需查找字符在原始数据中的位置;该系统包括用于执行上述操作的语言转换模块,索引建立模块和索引模块;本发明基于Postgresql的大字段特值索引系统与方法,可以解决现有技术中Postgresql数据库大字段特值索引慢的问题,实现Postgresql数据库大字段特值的快速索引。
【IPC分类】G06F17/30
【公开号】CN105488087
【申请号】CN201410844962
【发明人】梁志超, 孙晋超, 张栗伟
【申请人】哈尔滨安天科技股份有限公司
【公开日】2016年4月13日
【申请日】2014年12月31日