一种创建索引表的方法及设备与流程

文档序号:11707709阅读:245来源:国知局
本申请涉及计算机领域,尤其涉及一种创建索引表的方法及设备。
背景技术
::随着数据库技术的发展和应用,数据库存储的数据量与日俱增,同时快速、灵活地进行大数据量的复杂查询处理也成为新的需求。olap(on-lineanalyticalprocessing,联机分析处理),专门用于支持复杂的分析操作,侧重对决策人员和高层管理人员的决策支持。通常状况下,olap用户只需要查询少数的几个数据列,利用行式存储会加载很多无用的数据列,导致查询性能下降。分布式列式存储的基本查询方法首先从zookeeper中读取元信息,进而去集群中各个机器读取所有的数据文件,进而从每个数据文件中读取满足条件的记录,此方式直接导致数据访问量过大,影响了olap的查询性能。申请内容本申请的一个目的是提供一种创建索引表的方法及设备,优化底层存储结构,从而为数据查询提供方便。根据本申请的一个方面,提供了一种创建索引表的方法,所述方法包括:创建获取到的数据源对应数据表的元信息的结构,其中,所述数据表的元信息包括所述数据表中所有数据文件的位置信息,所述数据文件以列的形式存储;创建待创建索引表的数据结构,根据用户的请求确定所述数据表中所述待创建索引表的索引列,所述索引列为所述数据表中的部分列,并根据所述索引列创建所述待创建索引表对应的元信息的结构,其中,所述待创建索引表对应的元信息包括所述待创建索引表中索引文件的位置信息;将所述数据源中当前数据行生成的数据文件分配至从节点,并根据所述数据表的元信息的结构及所述数据文件的已分配的位置信息,更新所述数据文件对应数据表的元信息;将所述待创建索引表的索引文件的信息分配至对应的从节点的索引文件中,并更新所述待创建索引表对应的元信息。进一步地,所述待创建索引表的数据结构中索引文件的结构包括bplustree结构,其中,所述bplustree结构的叶子节点包括键值和位置信息值。进一步地,所述创建所述待创建索引表的数据结构,包括:根据所述待创建索引表的索引列的值确定所述叶子节点的键值;根据所述索引列所属数据文件的文件名及所述索引列所在的行在所述数据文件中的偏移量确定所述叶子节点的位置信息值。进一步地,所述待创建索引表包括哈希类全局索引表和/或范围类全局索引表。进一步地,当所述待创建索引表为哈希类全局索引表时,将所述待创建索引表中索引列对应的索引文件的信息分配至所述待创建索引表对应的从节点的索引文件中,包括:根据所述哈希类全局索引表的索引列的值确定的哈希值,将所述哈希类全局索引表的索引文件对应的键值和位置信息值分配至对应的从节点的索引文件中。进一步地,根据所述哈希类全局索引表的索引列的值确定的哈希值,将所述哈希类全局索引表的索引文件对应的键值和位置信息值分配至所述哈希类全局索引表对应的从节点的索引文件中,包括:根据所述哈希类全局索引表的索引列的值及所述从节点的个数确定所述索引列的哈希值;将所述索引列的哈希值为i对应的bplustree结构中叶子节点的键值及位置信息值分配至第i+1个从节点的索引文件中,其中,i为自然数。进一步地,当所述待创建索引表为范围类全局索引表时,d将所述待创建索引表中索引列对应的索引文件的信息分配至所述待创建索引表对应的从节点的索引文件中,包括:根据对所述索引列的值进行采样的采样结果确定分配范围区间,并记录每个从节点以及其对应的索引列的分配范围区间;根据所述分配范围区间将所述范围类全局索引表的索引文件的信息分配至对应的从节点的索引文件中。进一步地,根据所述分配范围区间将所述范围类全局索引表的索引文件的信息分配至所述范围类全局索引表对应的从节点的索引文件中,包括:将所述范围类全局索引表的索引列的值与所述记录的分配范围区间进行比较,确定所述索引列的值所在的分配范围区间;根据所述索引列的值所在的分配范围区间,将所述索引列的值对应的bplustree结构中叶子节点的键值及位置信息值分配至所述分配范围区间对应的从节点的索引文件。进一步地,将所述待创建索引表中索引列对应的索引文件的信息分配至所述待创建索引表对应的从节点的索引文件中时,还包括:若所述索引文件中已存在所述键值;则将新的位置信息值与旧的位置信息值融合至所述键值对应的叶子节点。进一步地,将所述待创建索引表中索引列对应的索引文件的信息分配至所述待创建索引表对应的从节点的索引文件中时,还包括:若所述索引文件中不存在所述键值,则在所述bplustree结构中插入新的叶子节点,将所述键值及位置信息值存储至所述新的叶子节点。进一步地,将所述数据源中当前数据行生成的数据文件分配至所述数据表对应的从节点之前,还包括:当所述数据源的行数达到预设的数据文件的大小阈值时,则将当前数据行新生成为一个数据文件,将新生成的数据文分配至所述数据表对应的从节点,并更新所述数据文件对应的数据表的元信息。进一步地,将所述待创建索引表中索引列对应的索引文件的信息分配至所述待创建索引表对应的从节点的索引文件中之前,还包括:当所述待创建索引表的索引文件的大小达到预设的索引文件大小阈值时,生成新的索引文件,并将所述新的索引文件的位置信息更新至所述待创建索引表对应的元信息中。根据本申请另一个方面,还提供了一种创建索引表的设备,所述设备包括:第一创建装置,用于创建获取到的数据源对应数据表的元信息的结构,其中,所述数据表的元信息包括所述数据表中所有数据文件的位置信息,所述数据文件以列的形式存储;第二创建装置,用于创建待创建索引表的数据结构,根据用户的请求确定所述数据表中所述待创建索引表的索引列,所述索引列为所述数据表中的部分列,并根据所述索引列创建所述待创建索引表对应的元信息的结构,其中,所述待创建索引表对应的元信息包括所述待创建索引表中索引文件的位置信息;数据文件分配装置,用于将所述数据源中当前数据行生成的数据文件分配至从节点,并根据所述数据表的元信息的结构及所述数据文件的已分配的位置信息,更新所述数据文件对应数据表的元信息;分配装置,用于将所述待创建索引表的索引文件的信息分配至对应的从节点的索引文件中,并更新所述待创建索引表对应的元信息。进一步地,所述待创建索引表的数据结构中索引文件的结构包括bplustree结构,其中,所述bplustree结构的叶子节点包括键值和位置信息值。进一步地,所述第二创建装置用于:根据所述待创建索引表的索引列的值确定所述叶子节点的键值;根据所述索引列所属数据文件的文件名及所述索引列所在的行在所述数据文件中的偏移量确定所述叶子节点的位置信息值。进一步地,所述待创建索引表包括哈希类全局索引表和/或范围类全局索引表。进一步地,当所述待创建索引表为哈希类全局索引表时,所述分配装置用于:根据所述哈希类全局索引表的索引列的值确定的哈希值,将所述哈希类全局索引表的索引文件对应的键值和位置信息值分配至对应的从节点的索引文件中。进一步地,所述分配装置用于:根据所述哈希类全局索引表的索引列的值及所述从节点的个数确定所述索引列的哈希值;将所述索引列的哈希值为i对应的bplustree结构中叶子节点的键值及位置信息值分配至第i+1个从节点的索引文件中,其中,i为自然数。进一步地,当所述待创建索引表为范围类全局索引表时,所述分配装置用于:根据对所述索引列的值进行采样的采样结果确定分配范围区间,并记录每个从节点以及其对应的索引列的分配范围区间;根据所述分配范围区间将所述范围类全局索引表的索引文件的信息分配至对应的从节点的索引文件中。进一步地,所述分配装置用于:将所述范围类全局索引表的索引列的值与所述记录的分配范围区间进行比较,确定所述索引列的值所在的分配范围区间;根据所述索引列的值所在的分配范围区间,将所述索引列的值对应的bplustree结构中叶子节点的键值及位置信息值分配至所述分配范围区间对应的从节点的索引文件。进一步地,所述分配装置还用于:若所述索引文件中已存在所述键值;则将新的位置信息值与旧的位置信息值融合至所述键值对应的叶子节点。进一步地,所述分配装置还用于:若所述索引文件中不存在所述键值,则在所述bplustree结构中插入新的叶子节点,将所述键值及位置信息值存储至所述新的叶子节点。进一步地,所述设备还包括:生成数据文件装置,用于当所述数据源的行数达到预设的数据文件的大小阈值时,则将当前数据行新生成为一个数据文件,将新生成的数据文分配至所述数据表对应的从节点,并更新所述数据文件对应的数据表的元信息。进一步地,所述设备还包括:生成索引文件装置,用于当所述待创建索引表的索引文件的大小达到预设的索引文件大小阈值时,生成新的索引文件,并将所述新的索引文件的位置信息更新至所述待创建索引表对应的元信息中。与现有技术相比,本申请通过创建获取到的数据源对应数据表的元信息的结构,其中,所述数据表的元信息包括所述数据表中所有数据文件的位置信息,所述数据文件以列的形式存储;接着,创建待创建索引表的数据结构,根据用户的请求确定所述数据表中所述待创建索引表的索引列,所述索引列为所述数据表中的部分列,并根据所述索引列创建所述待创建索引表对应的元信息的结构,其中,所述待创建索引表对应的元信息包括所述待创建索引表中索引文件的位置信息;随后,将所述数据源中当前数据行生成的数据文件分配至从节点,并根据所述数据表的元信息的结构及所述数据文件的已分配的位置信息,更新所述数据文件对应数据表的元信息;将所述待创建索引表的索引文件的信息分配至对应的从节点的索引文件中,并更新所述待创建索引表对应的元信息,进而优化了底层存储结构,当应用于数据查询时,提供索引文件的信息,从而根据索引文件的信息能够快速定位到满足条件的数据文件,大大减少了数据的访问量,提高了查询性能。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1示出根据本申请一个方面的一种创建索引表的方法流程示意图;图2示出本申请中的一实施例的分布式系统框架;图3示出本申请中的一实施例的数据源;图4示出本申请中的一实施例中数据源的查询结构化语句;图5示出本申请中的一实施例中数据表的数据文件的结构示意图;图6示出本申请中的一实施例中创建索引表后索引文件的信息分配示意图;图7示出本申请中的一实施例中哈希类索引表的一个索引文件的结构示意图;图8示出本申请中的一实施例中范围类索引表的一个索引文件的结构示意图;图9示出根据本申请另一个方面的一种创建索引表的设备的结构示意图。附图中相同或相似的附图标记代表相同或相似的部件。具体实施方式下面结合附图对本申请作进一步详细描述。在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。图1示出根据本申请的一个方面,提供的一种创建索引表的方法流程示意图,所述方法包括:步骤s11~步骤s14,应用于分布式系统中,在步骤s11中,创建获取到的数据源对应数据表的元信息的结构,其中,所述数据表的元信息包括所述数据表中所有数据文件的位置信息,所述数据文件以列的形式存储;在本申请一实施例中,创建分布式全局索引表,则首先需要创建数据源对应数据表的元信息,元信息包括数据表所包含的所有数据文件在集群中各个机器硬盘上的位置信息。需要说明的是,创建数据表对应的元信息之前需要创建数据表的结构,数据表的结构包括数据文件的结构,数据表中包括数据源的数据,将数据源中的数据存储为数据表,而数据表的存储形式为数据文件。本申请一实施例中的分布式系统框架图如图2所示,包括客户端(client)、主节点(master)、一个或若干从节点(slave)以及zookeeper,可将每个数据表中数据文件存储于固态硬盘(ssd)中,在本申请实施例中,数据表的元信息存储在zookeeper中,其中,所述zookeeper为性能分布式应用的协调系统。在步骤s12中,创建待创建索引表的数据结构,根据用户的请求确定所述数据表中所述待创建索引表的索引列,所述索引列为所述数据表中的部分列,并根据所述索引列创建所述待创建索引表对应的元信息的结构,其中,所述待创建索引表对应的元信息包括所述待创建索引表中索引文件的位置信息;接上述实施例,根据实际需求,确定需要创建全局索引的列,即从数据表中选取部分列作为索引列,进而利用所选取的索引列创建分布式全局索引表对应的元信息,其中,该元信息包括全局索引表所包含的所有索引文件在集群中各个机器硬盘上的位置信息。所述待创建的索引表被创建成功后可以用于分布式系统中数据的查询,能够满足用户只需要查询少数的几个数据列的需求的同时避免读取所有的数据文件,大大减少访问的数据量。需要说明的是,在本申请一实施例中,根据所述索引列创建所述待创建索引表对应的元信息的结构时,可以是根据每一个索引列建立对应的一个索引表,然后创建索引表对应的元信息的结构,当然,创建索引表时也可以是根据用户需求对应的索引列中的若干索引列共同建立一个索引表。其中,创建全局索引表的数据结构,全局索引表的结构包括索引文件的结构。优选地,所述待创建索引表的数据结构中索引文件的结构包括bplustree结构,其中,所述bplustree结构的叶子节点包括键值和位置信息值。在此,全局索引表的索引文件可采用bplustree结构进行组织存储,bplustree结构的叶子节点包含元组<键值,位置信息值>(<key,value>),bplustree结构能够有效地对输入的索引列数据进行排序,从而可以快速查询索引列对应的记录的位置,快速响应数据的查询任务。在本申请一具体实施例中,如图3所示的实例的数据源,该数据源共1000条记录,包括地址标识(id)、姓名(name)、年龄(age)、性别(sex)四列数据。图4所示的用户针对该数据源的查询sql语句,用户需要对id列的数据进行过滤筛选,因而需要对id列创建全局索引表,其中,tablea表示为图3所示的数据源对应的数据表,sql1:“select*fromtableawhereid=1”表示查询sql1语句执行的是查询数据表a中id为1的数据列对应的数据,其他sql语句表示与其类似。在步骤s13中,将所述数据源中当前数据行生成的数据文件分配至从节点,并根据所述数据表的元信息的结构及所述数据文件的已分配的位置信息,更新所述数据文件对应数据表的元信息;在此,如图2所示的分布式列式存储平台,分布式列式存储平台存储数据源数据时,master根据负载平衡原则将数据文件均匀分布在集群中的各个机器,每台机器含有该数据表的若干个数据文件(filesegment),filesegment的结构如图5所示,数据文件以列式存储的方式进行了存储,当olap用户只需要查询少数的几个数据列时,列式存储能够为用户只提供需要读取的相应的数据列,进而大大提高olpa的查询效率。优选地,在步骤s13之前,还包括:步骤s13’,当所述数据源的行数达到预设的数据文件的大小阈值时,则将当前数据行新生成为一个数据文件,将新生成的数据文分配至所述数据表对应的从节点,并更新所述数据文件对应的数据表的元信息。在本申请一实施例中,每当内存中数据源的数据的行数等于一个数据文件的大小范围时,即把当前的数据行生成为一个数据文件,同时集群中的主节点(master)根据负载均衡原则将其分配至集群中某一机器的硬盘中存储,并更新数据表文件对应的元信息,此时,针对该数据文件的全局索引表也开始创建。在步骤s14中,将所述待创建索引表的索引文件的信息分配至对应的从节点的索引文件中,并更新所述待创建索引表对应的元信息。在此,将生成的数据文件分配存储后,需要将其对应的索引文件的信息进行分配至对应slave的索引文件中,并更新全局索引表对应的元信息中。其中,索引文件的信息可以包括创建完成的索引表中的索引列的值、所述索引列所属数据文件的文件名、所述索引列所在的行在所述数据文件中的偏移量等等。在本申请一实施例中,所述待创建索引表包括哈希类全局索引表或范围类全局索引表。在此,哈希类与范围类全局索引表的索引文件在集群中的分配策略略有不同。哈希类全局索引表是根据索引列的哈希值决定索引文件在分布式集群中所分布的机器,而范围类全局索引表则是根据索引列值的范围将索引文件分配到对应的机器。优选地,在步骤s12中,根据所述待创建索引表的索引列的值确定所述叶子节点的键值;根据所述数据表的元信息中数据文件的位置信息、所述待创建索引表的元信息中索引文件的位置信息及所述索引列在索引文件中的偏移量确定所述叶子节点的位置信息值。在本申请一实施例中,哈希类全局索引表和哈希类全局索引表的索引文件均采用bplustree结构进行组织存储。bplustree的叶子节点包含元组<key,value>,其中,key值为索引列的值,来源于数据文件,value为该索引列所在的数据文件信息和满足条件的记录在该索引文件中的偏移量。master根据负载均衡原则将数据文件均匀地分布在集群中的各个机器。每台机器含有该数据表的若干个数据文件(filesegment),filesegment的结构如图5所示;分布式列式存储平台创建数据源对应的全局索引表时,哈希类全局索引表对应的索引文件为hashindexfilesegment,而范围类全局索引表对应的索引文件为rangeindexfilesegment。优选地,当所述待创建索引表为哈希类全局索引表时,在步骤s14中,根据所述哈希类全局索引表的索引列的值确定的哈希值,将所述哈希类全局索引表的索引文件对应的键值和位置信息值分配至所述哈希类全局索引表对应的从节点的索引文件中。具体地,在步骤s14中,根据所述哈希类全局索引表的索引列的值及所述从节点的个数确定所述索引列的哈希值,将所述索引列的哈希值为i对应的bplustree结构中叶子节点的键值及位置信息值分配至第i+1个从节点的索引文件中,其中,i为自然数,从而合理地将索引文件的信息分配至每个slave中,达到均匀分布的目的。需要说明的是,通过确定哈希值,从而确定了索引文件的信息被分配至的机器的信息(如被分配至机器1上),即确定了将哈希值对应的<key,value>分配至的机器的信息,只有当<key,value>被分配至对应的机器的索引文件中时,其对应的bplustree结构中叶子点才真正的被创建完成。在本申请一实施例中,假设分布式集群中有1台master,n台slave。哈希类全局索引表通过对索引列求哈希值,而索引列的值为bplustree结构中叶子节点的key值,索引列对应的数据文件的信息和索引列对应记录在数据文件中的偏移量为value。将key以及key的哈希值为i的记录的位置信息value分配到第i+1台slave的索引文件中,其中,哈希值可以根据索引列的值及分布式集群中的slave个数确定。优选地,当所述待创建索引表为范围类全局索引表时,在步骤s14中,根据对所述索引列的值进行采样的采样结果确定分配范围区间,并记录每个从节点以及其对应的索引列的分配范围区间;根据所述分配范围区间将所述范围类全局索引表的索引文件的信息分配至所述范围类全局索引表对应的从节点的索引文件中。具体地,在步骤s14中,将所述范围类全局索引表的索引列的值与所述记录的分配范围区间进行比较,确定所述索引列的值所在的分配范围区间;根据所述索引列的值所在的分配范围区间,将所述索引列的值对应的bplustree结构中叶子节点的键值及位置信息值分配至所述分配范围区间对应的从节点的索引文件。在本申请一实施例中,假设分布式集群中有1台master,n台slave。范围类全局索引表通过对数据表文件的索引列的值进行采样,根据采样结果设定n个范围,使得每个范围内的数据量尽量均匀分布,并在master中记录每台机器以及其对应的索引列的范围区间。当生成一个索引文件时,会将索引文件的索引列的值与master中的n个范围进行比较,根据所属范围区域将该列对应的数据文件信息和在数据文件中的偏移量,即<key,value>更新到范围区域相应的slave的索引文件中。在本申请一实施例中,在步骤s14中,若所述索引文件中已存在所述键值;则将新的位置信息值与旧的位置信息值融合至所述键值对应的叶子节点。若所述索引文件中不存在所述键值,则在所述bplustree结构中插入新的叶子节点,将所述键值及位置信息值存储至所述新的叶子节点。在此,当将<key,value>分配到相应的slave的索引文件时,若该索引文件中已经存在该key值对应的叶子节点,则将新value与旧value进行融合;若该索引文件中不存在该key值,则插入新的叶子节点,将<key,value>元组存储到新的叶子节点中。优选地,所述方法还包括:步骤s14’,当所述待创建索引表的索引文件的大小达到预设的索引文件大小阈值时,生成新的索引文件,并将所述新的索引文件的位置信息更新至所述待创建索引表对应的元信息中。在本申请一实施例中,当哈希类全局索引表和范围类全局索引表的索引文件各自达到一个索引文件的大小的最大范围时,再生成新的索引文件,并将索引文件的位置信息更新到全局索引表对应的元信息中。在本申请一优选实施例中,比如分布式系统中有1台master,3台slave,将数据文件的最大范围设定为25行,当输入的数据行数等于最大范围25时,分布式列式存储平台将当前的数据行作为一个数据文件,master根据负载均衡原则将其输出到集群中某一机器的ssd中对应的数据文件(filesegment),并更新数据表对应的元信息。针对哈希类全局索引表,key为id的值,value为id对应的数据文件的信息和id对应记录在数据文件中的偏移量信息。通过key值取哈希,将哈希结果为0、1、2的<key,value>元组分别分配到集群中的第1、2、3台机器的哈希类索引表的索引文件(hashindexfilesegment)中,如图6所示,当id=1时,哈希结果为1,则将其<key,value>存储到集群中的第2台slave中,当id=2时,哈希结果为2,则将其<key,value>存储到集群中的第3台slave中;当id=3时,哈希结果为0,则将其<key,value>存储到集群中的第1台slave中,其中,{key|key%3=哈希值}是指key与slave的个数(这里个数为3)之间进行取余,得到哈希值,这里key为id的值。当创建范围类全局索引表时,对数据源的key值采样后的范围划分结果如图6所示,范围划分原则应尽量使得各个范围区间内的记录数接近,范围分区的结果包含[1,333]、[334,666]和[667,999]三个区间,并在master中存储三台slave各自对应的范围区域,当数据块中的索引列的值满足某个范围区间时,将其索引信息存储到该范围区间对应的slave机器的范围类索引表的数据文件(rangeindexfilesegment)中,以bplustree叶子节点的形式存在,如id=5,key值落在第一个范围区间,则将其对应的<key,value>信息存储到第一台机器的索引文件中。需要说明的是,无论是哈希类索引表还是范围类索引表,在将<key,value>分配至对应的slave的索引文件中时,需要判断索引文件的结构bplustree中是否已存在对应的索引列的id,若bplustree中已经存在某个id,则直接将该id列对应的数据块(block)信息和该列在block中的行号与原来的value进行融合。若该索引文件中不存在该key值,则插入新的叶子节点,将<key,value>存储到新的叶子节点中。当以上两类索引的索引文件各自达到一个索引文件的大小的最大范围时,再生成新的索引文件,并将索引文件的位置信息更新到全局索引表对应的元信息中;通过本申请所述的创建索引表的方法,得到数据源对应的索引文件,图7示出本申请一实施例中的数据源创建的一个哈希类索引表的索引文件,由于所有key值取哈希结果均为0,所以该索引文件(hashindexfilesegment)位于集群的slave1中,存储结构为bplustree,叶子节点存储着<key,value>,如key=3的对应value为fs1:4,表示id=3的记录位于filesegment1中,且偏移量为4;图8示出本申请一实施例中的数据源创建的一个范围类索引表的索引文件,所有key值均小于333,该索引文件(rangeindexfilesegment)位于集群的slave1中,存储结构为bplustree,叶子节点存储着<key,value>,如key=1的对应value为fs1:1:2,表示id=1的记录位于filesegment1中,且偏移量为1和2。综上所述,通过本申请所述创建的索引表,优化了底层存储结构,可以应用于分布式系统中数据的查询,通过哈希类索引表和范围类索引表查询满足用户需求的部分列的数据,避免读取所有的数据文件,大大减少访问的数据量,提高联机分析处理任务的处理速度。当然,本申请所述创建的索引表,还可以应用于利用索引表分配系统资源等场景,并不局限于应用于数据的查询。图9示出根据本申请的另一个方面,提供的一种创建索引表的设备结构示意图,所述设备包括:第一创建装置11、第二创建装置12、数据文件分配装置13和分配装置14,应用于分布式系统中,第一创建装置11,用于创建获取到的数据源对应数据表的元信息的结构,其中,所述数据表的元信息包括所述数据表中所有数据文件的位置信息,所述数据文件以列的形式存储;在本申请一实施例中,创建分布式全局索引表,则首先需要创建数据源对应数据表的元信息,元信息包括数据表所包含的所有数据文件在集群中各个机器硬盘上的位置信息。需要说明的是,创建数据表对应的元信息之前需要创建数据表的结构,数据表的结构包括数据文件的结构,数据表中包括数据源的数据,将数据源中的数据存储为数据表,而数据表的存储形式为数据文件。本申请一实施例中的分布式系统框架图如图2所示,包括客户端(client)、主节点(master)、一个或若干从节点(slave)以及zookeeper,可将每个数据表中数据文件存储于固态硬盘(ssd)中,在本申请实施例中,数据表的元信息存储在zookeeper中,其中,所述zookeeper为性能分布式应用的协调系统。第二创建装置12,用于创建待创建索引表的数据结构,根据用户的请求确定所述数据表中所述待创建索引表的索引列,所述索引列为所述数据表中的部分列,并根据所述索引列创建所述待创建索引表对应的元信息的结构,其中,所述待创建索引表对应的元信息包括所述待创建索引表中索引文件的位置信息;接上述实施例,根据实际需求,确定需要创建全局索引的列,即从数据表中选取部分列作为索引列,进而利用所选取的索引列创建分布式全局索引表对应的元信息,其中,该元信息包括全局索引表所包含的所有索引文件在集群中各个机器硬盘上的位置信息。所述待创建的索引表被创建成功后可以用于分布式系统中数据的查询,能够满足用户只需要查询少数的几个数据列的需求的同时避免读取所有的数据文件,大大减少访问的数据量。需要说明的是,在本申请一实施例中,根据所述索引列创建所述待创建索引表对应的元信息的结构时,可以是根据每一个索引列建立对应的一个索引表,然后创建索引表对应的元信息的结构,当然,创建索引表时也可以是根据用户需求对应的索引列中的若干索引列共同建立一个索引表。其中,创建全局索引表的数据结构,全局索引表的结构包括索引文件的结构。优选地,所述待创建索引表的数据结构中索引文件的结构包括bplustree结构,其中,所述bplustree结构的叶子节点包括键值和位置信息值。在此,全局索引表的索引文件可采用bplustree结构进行组织存储,bplustree结构的叶子节点包含元组<键值,位置信息值>(<key,value>),bplustree结构能够有效地对输入的索引列数据进行排序,从而可以快速查询索引列对应的记录的位置,快速响应数据的查询任务。在本申请一具体实施例中,如图3所示的实例的数据源,该数据源共1000条记录,包括地址标识(id)、姓名(name)、年龄(age)、性别(sex)四列数据。图4所示的用户针对该数据源的查询sql语句,用户需要对id列的数据进行过滤筛选,因而需要对id列创建全局索引表,其中,tablea表示为图3所示的数据源对应的数据表,sql1:“select*fromtableawhereid=1”表示查询sql1语句执行的是查询数据表a中id为1的数据列对应的数据,其他sql语句表示含义与其类似。数据文件分配装置13,用于将所述数据源中当前数据行生成的数据文件分配至从节点,并根据所述数据表的元信息的结构及所述数据文件的已分配的位置信息,更新所述数据文件对应数据表的元信息;在此,如图2所示的分布式列式存储平台,分布式列式存储平台存储数据源数据时,master根据负载平衡原则将数据文件均匀分布在集群中的各个机器,每台机器含有该数据表的若干个数据文件(filesegment),filesegment的结构如图5所示,数据文件以列式存储的方式进行了存储,当olap用户只需要查询少数的几个数据列时,列式存储能够为用户只提供需要读取的相应的数据列,进而大大提高olpa的查询效率。优选地,所述设备还包括:生成数据文件装置13’,用于当所述数据源的行数达到预设的数据文件的大小阈值时,则将当前数据行新生成为一个数据文件,将新生成的数据文分配至所述数据表对应的从节点,并更新所述数据文件对应的数据表的元信息。在本申请一实施例中,每当内存中数据源的数据的行数等于一个数据文件的大小范围时,即把当前的数据行生成为一个数据文件,同时集群中的主节点(master)根据负载均衡原则将其分配至集群中某一机器的硬盘中存储,并更新数据表文件对应的元信息,此时,针对该数据文件的全局索引表也开始创建。分配装置14,用于将所述待创建索引表的索引文件的信息分配至对应的从节点的索引文件中,并更新所述待创建索引表对应的元信息。在此,将生成的数据文件分配存储后,需要将其对应的索引文件的信息进行分配至对应slave的索引文件中,并更新全局索引表对应的元信息中。其中,索引文件的信息可以包括创建完成的索引表中的索引列的值、所述索引列所属数据文件的文件名、所述索引列所在的行在所述数据文件中的偏移量等等。在本申请一实施例中,所述待创建索引表包括哈希类全局索引表或范围类全局索引表。在此,哈希类与范围类全局索引表的索引文件在集群中的分配策略略有不同。哈希类全局索引表是根据索引列的哈希值决定索引文件在分布式集群中所分布的机器,而范围类全局索引表则是根据索引列值的范围将索引文件分配到对应的机器。优选地,第二创建装置12,用于根据所述待创建索引表的索引列的值确定所述叶子节点的键值;根据所述数据表的元信息中数据文件的位置信息、所述待创建索引表的元信息中索引文件的位置信息及所述索引列在索引文件中的偏移量确定所述叶子节点的位置信息值。在本申请一实施例中,哈希类全局索引表和哈希类全局索引表的索引文件均采用bplustree结构进行组织存储。bplustree的叶子节点包含元组<key,value>,其中,key值为索引列的值,来源于数据文件,value为该索引列所在的数据文件信息和满足条件的记录在该索引文件中的偏移量。master根据负载均衡原则将数据文件均匀地分布在集群中的各个机器。每台机器含有该数据表的若干个数据文件(filesegment),filesegment的结构如图5所示;分布式列式存储平台创建数据源对应的全局索引表时,哈希类全局索引表对应的索引文件为hashindexfilesegment,而范围类全局索引表对应的索引文件为rangeindexfilesegment。优选地,当所述待创建索引表为哈希类全局索引表时,分配装置14用于根据所述哈希类全局索引表的索引列的值确定的哈希值,将所述哈希类全局索引表的索引文件对应的键值和位置信息值分配至所述哈希类全局索引表对应的从节点的索引文件中。具体地,分配装置14,用于根据所述哈希类全局索引表的索引列的值及所述从节点的个数确定所述索引列的哈希值,将所述索引列的哈希值为i对应的bplustree结构中叶子节点的键值及位置信息值分配至第i+1个从节点的索引文件中,其中,i为自然数,从而合理地将索引文件的信息分配至每个slave中,达到均匀分布的目的。需要说明的是,通过确定哈希值,从而确定了索引文件的信息被分配至的机器的信息(如被分配至机器1上),即确定了将哈希值对应的<key,value>分配至的机器的信息,只有当<key,value>被分配至对应的机器的索引文件中时,其对应的bplustree结构中叶子点才真正的被创建完成。在本申请一实施例中,假设分布式集群中有1台master,n台slave。哈希类全局索引表通过对索引列求哈希值,而索引列的值为bplustree结构中叶子节点的key值,索引列对应的数据文件的信息和索引列对应记录在数据文件中的偏移量为value。将key以及key的哈希值为i的记录的位置信息value分配到第i+1台slave的索引文件中,其中,哈希值可以根据索引列的值及分布式集群中的slave个数确定。优选地,当所述待创建索引表为范围类全局索引表时,分配装置14,用于根据对所述索引列的值进行采样的采样结果确定分配范围区间,并记录每个从节点以及其对应的索引列的分配范围区间;根据所述分配范围区间将所述范围类全局索引表的索引文件的信息分配至所述范围类全局索引表对应的从节点的索引文件中。具体地,分配装置14,用于将所述范围类全局索引表的索引列的值与所述记录的分配范围区间进行比较,确定所述索引列的值所在的分配范围区间;根据所述索引列的值所在的分配范围区间,将所述索引列的值对应的bplustree结构中叶子节点的键值及位置信息值分配至所述分配范围区间对应的从节点的索引文件。在本申请一实施例中,假设分布式集群中有1台master,n台slave。范围类全局索引表通过对数据表文件的索引列的值进行采样,根据采样结果设定n个范围,使得每个范围内的数据量尽量均匀分布,并在master中记录每台机器以及其对应的索引列的范围区间。当生成一个索引文件时,会将索引文件的索引列的值与master中的n个范围进行比较,根据所属范围区域将该列对应的数据文件信息和在数据文件中的偏移量,即<key,value>更新到范围区域相应的slave的索引文件中。在本申请一实施例中,分配装置14,用于若所述索引文件中已存在所述键值;则将新的位置信息值与旧的位置信息值融合至所述键值对应的叶子节点。若所述索引文件中不存在所述键值,则在所述bplustree结构中插入新的叶子节点,将所述键值及位置信息值存储至所述新的叶子节点。在此,当将<key,value>分配到相应的slave的索引文件时,若该索引文件中已经存在该key值对应的叶子节点,则将新value与旧value进行融合;若该索引文件中不存在该key值,则插入新的叶子节点,将<key,value>元组存储到新的叶子节点中。优选地,所述设备还包括:生成索引文件装置14’,用于当所述待创建索引表的索引文件的大小达到预设的索引文件大小阈值时,生成新的索引文件,并将所述新的索引文件的位置信息更新至所述待创建索引表对应的元信息中。在本申请一实施例中,当哈希类全局索引表和范围类全局索引表的索引文件各自达到一个索引文件的大小的最大范围时,再生成新的索引文件,并将索引文件的位置信息更新到全局索引表对应的元信息中。在本申请一优选实施例中,比如分布式系统中有1台master,3台slave,将数据文件的最大范围设定为25行,当输入的数据行数等于最大范围25时,分布式列式存储平台将当前的数据行作为一个数据文件,master根据负载均衡原则将其输出到集群中某一机器的ssd中对应的数据文件(filesegment),并更新数据表对应的元信息。针对哈希类全局索引表,key为id的值,value为id对应的数据文件的信息和id对应记录在数据文件中的偏移量信息。通过key值取哈希,将哈希结果为0、1、2的<key,value>元组分别分配到集群中的第1、2、3台机器的哈希类索引表的索引文件(hashindexfilesegment)中,如图6所示,当id=1时,哈希结果为1,则将其<key,value>存储到集群中的第2台slave中,当id=2时,哈希结果为2,则将其<key,value>存储到集群中的第3台slave中;当id=3时,哈希结果为0,则将其<key,value>存储到集群中的第1台slave中,其中,{key|key%3=哈希值}是指key与slave的个数(这里个数为3)之间进行取余,得到哈希值,这里key为id的值。当创建范围类全局索引表时,对数据源的key值采样后的范围划分结果如图6所示,范围划分原则应尽量使得各个范围区间内的记录数接近,范围分区的结果包含[1,333]、[334,666]和[667,999]三个区间,并在master中存储三台slave各自对应的范围区域,当数据块中的索引列的值满足某个范围区间时,将其索引信息存储到该范围区间对应的slave机器的范围类索引表的数据文件(rangeindexfilesegment)中,以bplustree叶子节点的形式存在,如id=5,key值落在第一个范围区间,则将其对应的<key,value>信息存储到第一台机器的索引文件中。需要说明的是,无论是哈希类索引表还是范围类索引表,在将<key,value>分配至对应的slave的索引文件中时,需要判断索引文件的结构bplustree中是否已存在对应的索引列的id,若bplustree中已经存在某个id,则直接将该id列对应的数据块(block)信息和该列在block中的行号与原来的value进行融合。若该索引文件中不存在该key值,则插入新的叶子节点,将<key,value>存储到新的叶子节点中。当以上两类索引的索引文件各自达到一个索引文件的大小的最大范围时,再生成新的索引文件,并将索引文件的位置信息更新到全局索引表对应的元信息中;通过本申请所述的创建索引表的方法,得到数据源对应的索引文件,图7示出本申请一实施例中的数据源创建的一个哈希类索引表的索引文件,由于所有key值取哈希结果均为0,所以该索引文件(hashindexfilesegment)位于集群的slave1中,存储结构为bplustree,叶子节点存储着<key,value>,如key=3的对应value为fs1:4,表示id=3的记录位于filesegment1中,且偏移量为4;图8示出本申请一实施例中的数据源创建的一个范围类索引表的索引文件,所有key值均小于333,该索引文件(rangeindexfilesegment)位于集群的slave1中,存储结构为bplustree,叶子节点存储着<key,value>,如key=1的对应value为fs1:1:2,表示id=1的记录位于filesegment1中,且偏移量为1和2。综上所述,通过本申请所述创建的索引表,优化了底层存储结构,可以应用于分布式系统中数据的查询,通过哈希类索引表和范围类索引表查询满足用户需求的部分列的数据,避免读取所有的数据文件,大大减少访问的数据量,提高联机分析处理任务的处理速度。当然,本申请所述创建的索引表,还可以应用于利用索引表分配系统资源等场景,并不局限于应用于数据的查询。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1