一种数据多线程导出方法及系统与流程

文档序号:11133961阅读:433来源:国知局
一种数据多线程导出方法及系统与制造工艺

本发明涉及互联网技术领域,特别涉及一种数据多线程导出方法及系统。



背景技术:

随着互联网的发展,越来越多的数据累计起来。对于一个运营中的用户平台,会出现海量的数据需要处理和分析。这就需要数据的导入导出以及备份等工作。通常的数据导出是在数据库层面进行的。

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

数据库中的数据是为众多用户所共享其信息而建立的,已经摆脱了具体程序的限制和制约。不同的用户可以按各自的用法使用数据库中的数据;多个用户可以同时共享数据库中的数据资源,即不同的用户可以同时存取数据库中的同一个数据。数据共享性不仅满足了各用户对信息内容的要求,同时也满足了各用户之间信息通信的要求。

随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。《著云台》的分析师团队认为,大数据(Big data)通常用来形容一个公司创造的大量非结构化数据和半结构化数据,这些数据在下载到关系型数据库用于分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。

大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘电网、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。

大数据就是互联网发展到现今阶段的一种表象或特征而已,没有必要神话它或对它保持敬畏之心,在以云计算为代表的技术创新大幕的衬托下,这些原本很难收集和使用的数据开始容易被利用起来了,通过各行各业的不断创新,大数据会逐步为人类创造更多的价值。

数据导出和备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。传统的数据备份主要是采用内置或外置的磁带机进行冷备份。但是这种方式只能防止操作失误等人为故障,而且其恢复时间也很长。随着技术的不断发展,数据的海量增加,不少的企业开始采用网络备份。网络备份一般通过专业的数据存储管理软件结合相应的硬件和存储设备来实现。

导入导出,是数据库的一种专用命令。这里的数据库指的是软件方面的所有与之有关的数据库。不同数据库对于导入导出的要求不同。

例如,微软的ACCSS数据库,是数据库中拥有比较傻瓜的导入导出。同样,微软其它办公软件也拥有相同的功能,直接把数据导入到新建的文件就可以了。导入导出的字段的多少不受限制。莲花软件则是比较严厉的数据库。在导入导出时必须把字段一一对应,才可以导入导出成功。包括了APPROACH,LOTUS 123办公软件,而APPROACH数据库仅有108个字段。而在电影动画业采用的动画制造软件,如FLASH,这里的导入导出,实际上就是把制作动画的元素、舞台和元素库,导入到单独的动画,导出到不同的场景和舞台。

现有技术中,对于数据的导入导出通常会采用单线程的方式进行,按照数据的先后顺序等,逐一导入导出数据。然而,当数据量很大的时候,导入导出的效率也会明显降低,从而影响用户体验。因而,亟需要一种提高数据导入导出效率的方案,以提高对数据导入导出的速度和效率。



技术实现要素:

本发明提供一种数据多线程导出方法及系统,用以解决现有技术中大数据量情况下数据导出效率低下的问题。

本发明提供一种数据多线程导出方法,包括:

预设导出数据的线程数M;

根据所述线程数M将预导出的数据分为M组,每组数据分别用一个线程导出;

将每个线程导出的数据组装成为完整的导出数据。

所述方法还包括:

所述导出数据的线程数M根据实际可提供的线程数H设定。

所述方法还包括:

根据所述线程数M将预导出的数据分为N组,所述N小于M。

所述方法还包括:

将所述预导出的数据根据先后顺序分组;

将每个线程导出的数据根据所述先后顺序,组装成为完整的导出数据。

所述方法还包括:

所述先后顺序为数据存储的先后顺序或读取的先后顺序。

所述方法还包括:

所述多个线程同时导出所述数据。

一种数据多线程导出系统,包括:

线程设定单元,用于预设导出数据的线程数M;

数据分组单元,用于根据所述线程数M将预导出的数据分为M组;

导出单元,用于将每组数据分别用一个线程导出;

组装单元,用于将每个线程导出的数据组装成为完整的导出数据。

所述数据分组单元还用于根据所述线程数M将预导出的数据分为N组, 所述N小于M。

所述数据分组单元还用于将所述预导出的数据根据先后顺序分组;

所述组装单元将每个线程导出的数据根据所述先后顺序,组装成为完整的导出数据。

所述导出单元还用于将多个线程同时导出所述数据。

本发明实施例通过预设导出数据的线程数M;根据所述线程数M将预导出的数据分为M组,每组数据分别用一个线程导出;将每个线程导出的数据组装成为完整的导出数据。本发明实施例的方案,能够提高数据导出的速度和效率,并提高数据安全性,同时,对于数据导出的可操作性也有所改善,极大的提高了用户体验度。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明实施例1提供的一种数据多线程导出方法原理流程图;

图2为本发明实施例2提供的一种数据多线程导出系统结构示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

如图1所示,为本发明实施例1提供的一种数据多线程导出方法原理流程图,其中,

步骤11,预设导出数据的线程数M。

数据的导入导出,现有方式通常是采用单线程的方式,这样效率比较低,不适应大数据量时候的数据导入导出操作。要提高效率,本实施例提供了多线程的数据导出方式。数据导入的方式与导出同理,本实施例不做赘述。

首先需要设定导出数据所需要用到的线程数。这个数最小可以是1,最大根据系统所能支持的线程数设定。这个线程数将决定数据导出所支持的通道数,因而,线程数M的设定,通常需要参照多个参数,包括系统能支持的最大线程数、数据分组所能支持的线程数、数据的大小以及分组的成本等。

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性。

1)轻型实体

线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述。TCB包括以下信息:

(1)线程状态。

(2)当线程不运行时,被保存的现场资源。

(3)一组执行堆栈。

(4)存放每个线程的局部变量主存区。

(5)访问同一个进程中的主存和其它资源。

用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。

2)独立调度和分派的基本单位。

在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。

3)可并发执行。

在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。

4)共享进程资源。

在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。

当创建一个新的进程时,也创建一个新的线程,进程中的线程可以在同一 进程中创建新的线程中创建新的线程。

线程可以正常终止自己,也可能某个线程执行错误,由其它线程强行终止。终止线程操作主要负责释放线程占有的寄存器和栈。

当线程等待每个事件无法运行时,停止其运行。

当阻塞线程的事件发生时,将被阻塞的线程状态置为就绪态,将其挂到就绪队列。进程仍然具有与执行相关的状态。例如,所谓进程处于“执行”状态,实际上是指该进程中的某线程正在执行。对进程施加的与进程状态有关的操作,也对其线程起作用。例如,把某个进程挂起时,该进程中的所有线程也都被挂起,激活也是同样。

进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。

另外,进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。

与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。

线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。

通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。因而近年来推出的通用操作系统都引入了线程,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。

线程与进程的区别可以归纳为以下4点:

1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

3)调度和切换:线程上下文切换比进程上下文切换要快得多。

4)在多线程OS中,进程不是一个可执行的实体。

本实施例中,利用多线程的原理进行数据导出,实际上并不一定只程序意义上的多线程,只是利用多种途径和进程同时进行数据导出操作。

步骤12,根据线程数M将预导出的数据分为M组,每组数据分别用一个线程导出。

进一步来说,线程数M实际上是系统可以承载或者可以分配的最高的数量,而相应的,对于预导出的数据,显然也需要分组,分组的数量就是线程数M。这样可以保证线程数量与数据分组数量的一致。

显然,这里数据的分组不一定输M组,也可以分为N组,N小于等于M即可。也就是说,数据分组数量可以小于线程数,这样,同样可以保障数据的传输效率。

对于数据的分组,可以输将预导出的数据根据先后顺序来分组。这里的先后顺序,可以是预导出数据的存储顺序或者读取顺序,或者也可以是堆栈的出入栈顺序等。这个先后顺序主要是为了使得不同线程导出的数据互相不重复,以及为了后续数据组装方便。

数据分组后,每一组数据可以大小一致,也可以不一致。各组数据可以同时导出,也可以不同时导出。具体根据实际需要进行。每组数据用一个线程导出。实际上,也可以多个线程导出同一组数据。

分组后的数据,为了组装方便,可以在每组数据中加入识别码或者标志位,以方便后续组装。

步骤13,将每个线程导出的数据组装成为完整的导出数据。

由于每个线程导出一组数据,可以同时进行。这样,数据导出的效率会提高,速度会加快。但是导出的数据并不是完整的,每一个线程导出数据的一部分,需要组装后成为完整的导出数据。

组装数据可以根据之前分组时候的先后顺序,也可以采用分组时候加入的识别码或者标志位。组装后的数据为完整的导出数据,可以进行备份等操作。

本发明实施例通过预设导出数据的线程数M;根据所述线程数M将预导出的数据分为M组,每组数据分别用一个线程导出;将每个线程导出的数据组装成为完整的导出数据。本发明实施例的方案,能够提高数据导出的速度和效率,并提高数据安全性,同时,对于数据导出的可操作性也有所改善,极大的提高了用户体验度。

如图2所示,为本发明实施例2提供的一种数据多线程导出系统结构示意图,其中,

线程设定单元21,用于预设导出数据的线程数M;

数据分组单元22,用于根据所述线程数M将预导出的数据分为M组;

导出单元23,用于将每组数据分别用一个线程导出;

组装单元24,用于将每个线程导出的数据组装成为完整的导出数据。

进一步的,上述数据分组单元22还用于根据所述线程数M将预导出的数据分为N组,所述N小于M。

进一步的,上述数据分组单元22还用于将所述预导出的数据根据先后顺序分组;

所述组装单元24将每个线程导出的数据根据所述先后顺序,组装成为完整的导出数据。

进一步的,上述导出单元23还用于将多个线程同时导出所述数据。

综上所述,本发明实施例通过预设导出数据的线程数M;根据所述线程数 M将预导出的数据分为M组,每组数据分别用一个线程导出;将每个线程导出的数据组装成为完整的导出数据。本发明实施例的方案,能够提高数据导出的速度和效率,并提高数据安全性,同时,对于数据导出的可操作性也有所改善,极大的提高了用户体验度。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求 及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1