数据并行读取方法及装置的制造方法_2

文档序号:9667444阅读:来源:国知局
部分,分别为第一部分、第二部分及第三部分, 分别存储在存储介质Dl、D2及D3中,从存储介质D1中读取第一部分需要10秒,从存储介 质D2中读取第二部分需要8秒,从存储介质D3中读取第三部分需要12秒。
[0044] 步骤S104 :将多个分时长的总和平均分配至多台读取设备。
[0045] 其中,待读取数据表存储在多个不同的存储介质中,每个存储介质具有一个分时 长,表示从读取设备该存储介质中读取待读取数据表耗费的时长。
[0046] 需要说明的是,读取设备为多台,多台读取设备以并行方式读取待读取数据表。并 行读取耗费的时长取决于最后一台读取设备读取完毕所需的时长。因此,为了获得较高的 读取效率,需要保证多台读取设备的读取时长是平均的。
[0047] 因此,可以将上一步骤确定出的多个分时长平均分配给多台读取设备,以避免多 台读取设备读取耗时不均匀的情况。例如,从存储介质D1、D2及D3中读取部分待读取数据 表耗费的分时长分别为10秒、8秒及12秒,平均分配给三台读取设备,则每台读取设备对应 的平均时长为10秒。
[0048] 步骤S105:触发多台读取设备依据平均时长从多个存储介质中并行读取待读取 数据表。
[0049] 其中,可以依据任务调度算法,触发每台读取设备各自按照平均时长从存储介质 读取部分的待读取数据表。需要说明的是,任务调度算法为已知的一种任务分配方法,其 可以根据将从存储介质中读取数据表看作为读取任务,并为各台读取设备平均分配读取任 务,以保证各台读取设备耗费的读取时长为平均时长。
[0050] 存储介质以文件形式存储数据,因此,待读取数据表被划分为的各个部分便以不 同的文件形式存储在不同的存储介质中。存储介质为多个,因此,待读取数据表对应的文件 也为多个(文件数据量与存储介质数量相同)。例如,存储介质为D1、D2及D3,存储的文件 分别为F1、F2及F3。
[0051] 将以上多个文件作为分配对象,平均分配给多台读取设备,以保证每台读取设备 的读取时长为平均时长。其中,文件可以看作是文件块的集合,读取设备从存储介质中读取 文件,实际上是读取文件块的集合。因此,可以将多个文件块集合中的文件块平均分配给多 个读取设备。具体地:
[0052] 若某个文件完整地被读取的时长等于平均时长,便将该文件直接分配给某台读取 设备;若前者大于后者,则在该文件中选取一部分文件块分配给某台读取设备,保证读取设 备读取该部分文件块的时长为平均时长;若前者小于后者,则将该文件直接分配给某台读 取设备,并从其他文件中未被分配的文件块中选取一定量的文件块,保证读取设备读取该 文件及一定量的文件块的时间总长为平均时长。
[0053] 按照以上的任务分配原则,可以将多个存储介质中的待读取数据表平均分配给多 个读取设备,且该多个读取设备在不同的存储介质中的读取时长均为平均时长。
[0054] 在进行上述平均分配后,可以触发多台读取设备并行读取,将数据库中的待读取 数据表读取出来,且可以进一步写入集群系统中,实现数据的迀移。
[0055] 由以上技术方案可知,本申请提供了一种数据并行读取方法实施例,本实施例在 确定出待读取的数据表及用于读取数据表的读取设备后,进一步查找出该数据表存储在哪 个(些)存储介质上,若存储介质为多个,则再进一步确定从每个存储介质中读取数据表需 要的时长,进而将多个时长平均分配给以上多台读取设备,并触发该多台读取设备按照平 均时长并行从存储介质中读取数据表。可见,与现有技术中以数据表中某列的编号为依据 进行数据划分的方式不同,本实施例将从存储介质中读取数据表的时长作为依据,并将各 个时长平均分配给读取设备,从而可以保证每台读取设备耗费的时长是相同的,避免现有 技术出现的读取时长不平均现象,提高了并行读取的效率。
[0056] 具体来讲,现有技术中的并行读取方式效率较低,原因主要有二,一是简单地依据 数据表中某列的最大值和最小值进行数据范围的分割,不能保证每个取值区间内的数据量 是均匀的,导致读取设备的读取时长存在不同。例如,数据表id列的最大值为100,最小值 为1,则取值区间为(100-1)/2~50,那么两台读取设备各自需读取的数据分别为1 <id < 50和50 <id< 100的数据。然而,数据表的记录中,1 <id< 50的记录可能只有10 条,而50 <id< 100的记录为100条,因此,两条读取设备的读取时长会不同。
[0057] 二是,没有考虑底层物理介质存储特性之间的区别。具体地,现有技术从逻辑结构 的角度出发,在数据表中选取某列作为划分对象,并未考虑数据表实际在存储介质中的读 取速率,即使按照列值分割的方式为每台读取设备分配的数据量大致均匀,也可能由于这 些数据存储在读取效率不同的介质中,而导致读取设备的读取时长存在较大不同,从而影 响并行读取的效率。
[0058] 然而,本实施例考虑到待读取数据表在各个存储介质中的读取时长,将读取时长 按照读取设备的数量平均分配,使得读取设备按照平均时长进行读取,避免读取设备读取 时长之间的差异,从而提高并行读取的效率。
[0059] 在实际应用中,以上实施例中步骤S102 (确定存储待读取数据表的存储介质)的 具体实现方式可以包括步骤A1~A2。
[0060] 步骤A1 :从测试数据表中,获取待读取数据表中每条记录的特征数据;其中,每条 记录的特征数据均包括各自的文件编号,不同的文件编号对应不同的存储介质。
[0061] 其中,测试数据表是数据库中包含的一个数据表,该数据表中记录有待读取数据 表中每条记录的特征数据。记录的特征数据R0WID,是记录在数据库中的全局唯一地址,通 过其可以在数据库中查找到对应的记录。记录的特征数据R0WID是在记录被存入数据表时 由数据库系统生成的。
[0062] 通常地,记录的特征数据R0WID包括四部分,分别为数据对象编号0BJECT_ID、文 件编号FILE_ID、文件块编号BL0CK_ID及行号R0W,其中,文件编号FILE_ID为记录被存储 在的文件的编号,获得R0WID的方式可以包括以下两种。
[0063] 第一种,通过字符串拼接的方式从测试数据表table_test中进行查询。具体的一 个查询语句的示例如下:
[0064] SQL>SELECTROWID,SUBSTR(R0WID,1,6)"0BJECT_ID",SUBSTR(R0WID,7, 3)"FILE_ ID",SUBSTR(R0WID,10, 6)"BL0CK_ID",SUBSTR(R0WID,16, 3)"R0W"fromtable_test。
[0065] 第二种,使用数据库管理系统的记录特征数据包dbms_rowid提供的查询方法从 测试数据表table_test中查询。具体的一个查询语句的示例如下:
[0066] SQL>selectdbms_rowid.R0ffID_0BJECT(rowid) 0BJECT_ID#,dbms_rowid. R0ffID_RELATIVE_FN0(rowid)FILE_ID#,dbms_rowid.R0ffID_BL0CK_NUMBER(rowid)BL0CK_ ID#,dbms_rowid.R0ffID_R0ff_NUMBER(rowid)ROW#,rowidfromtable_test〇
[0067] 通过以上方法可以查询到每条记录的特征数据,记录的特征数据中包含该条记录 的文件编号。
[0068] 步骤A2 :查找不同的文件编号各自对应的存储介质名称。
[0069] 其中,文件编号表示存储介质中文件的编号,每个文件编号唯一对应一个存储介 质,因此,通过文件编号可以查询到所对应的存储介质。
[0070] 查询方法可以是查询文件编号对应的文件名称,文件名称表示的便是文件所在的 存储介质路径。一个具体地查询方法示例为:SQL>selectfile_namefromdba_data_files whereRELATIVE_FN0 = ' $FILE_ID'。其中,file_name为文件编号对应的文件名称。
[0071] 需要说明的是,通常地,待读取数据表中包含多条记录,每个记录均可以查询到对 应的文件编号,将相同的文件编号划分为一组,便可以获知待读取数据表分别存储在多少 个文件中,进而便可以获知待读取数据表分别存储在多少个存储介质中。
[0072] 例如,待读取数据表T3中包含的记录为10条,其中,第1~4条记录的文件编号 均为001、第5~7条记录的文件编号均为002、第8~10条记录的文件编号均为003。可 见,待读取
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1