文本导入数据库方法、装置、设备及存储介质与流程

文档序号:17476657发布日期:2019-04-20 06:10阅读:180来源:国知局
本发明实施例涉及大数据、分布式流式处理和数据库存储
技术领域
:,尤其涉及一种文本导入数据库方法、装置、设备及存储介质。
背景技术
::随着现代信息技术的快速发挥发展,各业务信息的数据量越来越大,并且随着分布式系统的发展,大量数据需要在分布式系统中的各个服务器之间进行传递。现有技术中,各个分布式机器读取操作数据都是通过分布式储存文件系统(hadoopdistributedfilesystem,hdfs),并且分布式计算将中间结果或者最终结果都是保存到hdfs上的,每次进行读取操作数据时,难以更好的适应数据挖掘和大数据处理。技术实现要素:本发明提供一种文本导入数据库的方法、装置、设备及存储介质,实现更好的适应数据挖掘和大数据处理。第一方面,本发明实施例提供了一种文本导入数据库的方法,包括:间隔预设时间获取数据源的文本文件;划分所述文本文件,得到对应的字符文本;将所述字符文本按照预设的顺序发送至目标数据库,以使所述目标数据库根据所述预设的顺序重组所述字符文本。第二方面,本发明实施例还提供了一种文本导入数据库的装置,包括:文本获取模块,用于间隔预设时间获取数据源的文本文件;文本划分模块,用于划分所述文本文件,得到对应的字符文本;字符发送模块,用于将所述字符文本按照预设的顺序发送至目标数据库,以使所述目标数据库根据所述预设的顺序重组所述字符文本。第三方面,本发明实施例还提供了一种设备,所述设备包括:一个或多个处理器;存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面中所述的文本导入数据库的方法。第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理装置执行时实现如第一方面中所述的文本导入数据库的方法。上述实施例提供的文本导入数据库的方法、装置、设备及存储介质,首先,通过间隔预设时间获取数据源的文本文件;然后划分文本文件,得到对应的字符文本;最后将字符文本按照预设的顺序发送至目标数据库,以使目标数据库根据预设的顺序重组字符文本。可见,本实施例提供的技术方案通过间隔预设时间获取文本文件,将大数据的文本文件按时间分成小的文本文件,然后对这小的文本文件进行处理,最后将处理后的文本文件发送至目标数据库,实现更好的适应数据挖掘和大数据处理。附图说明图1为本发明实施例一提供的文本导入数据库的方法的流程图;图2为本发明实施例一提供的文本导入数据库的方法流程图;图3为本发明实施例二提供的文本导入数据库的方法的流程图;图4为本发明实施例二提供的数据连接池的结构示意图;图5为本发明实施例三提供的使用sparkstreaming将数据写入mysql数据库的方法流程图;图6是本发明实施例四中的文本导入数据库的装置的结构示意图;图7为本发明实施例五提供的一种设备的结构示意图。具体实施方式下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。实施例一图1为本发明实施例一提供的文本导入数据库的方法的流程图,本实施例可适用于向数据库写入数据的情况,本实施例提供的文本导入数据库的方法可以由文本导入数据库的装置来执行,该文本导入数据库的装置可以通过软件和/或硬件的方式实现。设定文本导入数据库的装置集成在服务器中,即文本导入数据库的方法由服务器来执行。需要说明的是,本发明实施例中的文本导入数据库的方法是指一种分布式流式文本导入数据库的方法。具体的,如图1所示,本实施例提供的文本导入数据库的方法主要包括如下步骤:s110、间隔预设时间获取数据源的文本文件。在本实施例中,所述文本文件是一种由若干行字符构成的计算机文件。进一步的,所述文本文件可为任意数据类型的文件,文本文件可包括多个子文件,每个子文件可以是例如为文档、图片、视频等类型的数据。本实施例不对文本文件的数据类型进行限定。所述数据源是指提供文本文件的来源。需要说明的是,文本文件可以是己经存储于数据库a中的,需要写入数据库b中的文本文件,也可以是新获取的未存储过的文本文件。相应的,如果是己经存储于数据库a中的文本文件,那么数据库a是文本文件的数据源。如果是新获取的未存储过的文本文件,那么生成文本文件的设备是文本文件的数据源。需要说明的是,本实施仅对预设时间进行说明,而非限定。可以根据实际情况设计的合理的预设时间。例如:在文本文件较大,或者服务器处理数据的速度较慢时,可以将预设时间设计的较小。具体的,预设时间优选为60秒。需要说明的是,数据源提供的是大数据文本文件。本实施例中,间隔预设时间获取数据源的文本文件是指通过间隔一段时间获取一次文本文件,将大数据文本文件可以分成若干个小的文本文件,然后按照批量处理的方式来处理这若干个小的文本文件,可以更好地适用于数据挖掘和大数据量处理。进一步的,从数据源获取到的文本文件存储在计算机的内存中,并且在计算机内存中进行处理和计算,可以大大的提高计算速度。在本实施例中,采用java语言的软件开发工具包,其主要用于移动设备、嵌入式设备上的java应用程序。本实施例在预先搭建的spark平台中实现,spark是一个用来实现快速而通用的集群计算的平台,扩展了广泛使用的mapreduce计算模型,而且高效地支持更多的计算模式,包括交互式查询和流处理。spark由于能够在内存中计算速度,在处理大规模数据集的时候,在提高计算速度方面有无可比拟的优势。;示例性的,从数据源的获取文本文件可以通过如下方式来实现:sparkconf().setappname("streamingwordcount")。间隔60秒拆分一次任务可以通过如下方式来实现:javastreamingcontext(sparkconf,durations.seconds(60))。需要说明的是,本实施例仅对获取文本文件的方法进行说明,而非限定。可以根据设计情况设计其他合理的获取方法。s120、划分所述文本文件,得到对应的字符文本。在本实施例中,首先要指定划分文本文件的分界符,然后根据分界符对所述文本文件进行划分。本实施例中,所述的字符文本是指字符按照一定的顺序排列的字符。进一步的,本实施例中的分界符至少换段符、换行符和字间隔符。以换段符和/或换行符为分界符,划分所述文本文件,得到至少一个单行文本文件。即在所述文本文件中,从所述文本文件的首个字符开始,查找所述换段符和/或换行符,若查找到第一个换段符和/或换行符,则将首个字符至第一个换段符和/或换行符之前的字符作为第一个单行文本文件,并将此单行文本文件编号为00。然后查找所述换段符和/或换行符,若查找到第二个换段符和/或换行符,则将所述第一个换段符和/或换行符与第二个换段符和/或换行符之间的字符作为第二个单行文本文件,并将此单行文本文件编号为01。按照上述查找方法,依次查询所述文本文件,直至查找到最后一个第一个换段符和/或换行符。并对所有单行文本文件进行编号。进一步的,所述分界符还包括字间隔符,所述字间隔符用于进行字符之前的间隔。以字间隔符为分界符,划分单行文本文件,得到对应的字符文本。即在单行文本文件中,从单行文本文件的首个字符开始,查找字间隔符,若查找到字间隔符,则按照预设的顺序将所述字符编码。示例性的,第一个单行文本文件中的第一个字符可以编码0000,第二个单行文本文件中的第一个字符可以编码0100。需要说明的是,本实施例中仅对字符的编码方式进行说明,而非限定。s130、将所述字符文本按照预设的顺序发送至目标数据库,以使所述目标数据库根据所述预设的顺序重组所述字符文本。在本实施例中,将s120中编码的字符按照一定的顺序进行排列,将排列好的字符文本数据连接池发送至目标数据库。图2为本发明实施例一提供的文本导入数据库的方法流程图。数据源201提供文本文件,然后通过搭建的spark开发环境,使用sparkstreaming201编程,将文本文件导入数据库203。进一步的,所述数据203为关系型数据库,可以采用oracle数据库,也可以采用mysql数据库。将经过转换处理后的字符文本传入数据库通讯组件;将文本文件进行还原之后存储至目标数据库中。上述实施例提供的文本导入数据库的方法、装置、设备及存储介质,首先,通过间隔预设时间获取数据源的文本文件;然后划分文本文件,得到对应的字符文本;最后将字符文本按照预设的顺序发送至目标数据库,以使目标数据库根据预设的顺序重组字符文本。可见,本实施例提供的技术方案通过间隔预设时间获取文本文件,将大数据的文本文件按时间分成小的文本文件,然后对这小的文本文件进行处理,最后将处理后的文本文件发送至目标数据库,实现更好的适应数据挖掘和大数据处理。实施例二图3为本发明实施例二提供的文本导入数据库的方法的流程图,本实施例可适用于向数据库写入数据的情况,本实施例进一步优化了文本导入数据库的方法,如图3所示,优化后的文本导入数据库的方法,主要包括如下步骤:s310、建立访问所述数据库的数据库连接池。在本实施例中,可以采用oracle数据库,也可以采用mysql数据库。本实施例中,mysql数据库为例进行说明。以利用mysql数据库的api接口,在linux环境下采用java语言为开发工具构建单例模式数据连接池,数据库连接池采用单例模式,保证只可能初始化一次。s320、创建预设数量的访问所述数据库的数据库连接,并将所述数据库连接存放到所述数据库连接池中。在本实施例中,可以根据需要使用数据库连接的应用,一次性把一定数量的数据库连接建好,一般只需要花费40多毫秒的时间,放在连接池中给需要使用数据连接的应用使用。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个,免去了频繁建立数据库连接、断开数据库连接的时间开销。在本实施例中,首先可以利用api接口建立设定数量的数据库连接,在所述数据库连接上封装对外使用的接口函数,包括executesql,execute等,需要说明的是,本实施仅对接口函数进行说明,而非限定,可以根据实际情况设计合理的接口函数。此外,对于数据库连接的数量,本实施例也不做限定,可以根据实际情况设计合理的数据库连接的数量。需要说明的是,s310和s320是建立数据连接池步骤,不需要每次导入文本文件时,都进行建立。当数据连接池建立好之后,每次导入文本文件时,通过调用函数,调用数据连接池即可。s330、间隔预设时间获取数据源的文本文件。在本实施例中,建立数据库连接池之后,编写sparkstreaming代码,实现文本导入数据库的情况。s340、以换段符、换行符为第一分界符,划分所述文本文件,得到至少一个单行文本文件。在所述文本文件中,从所述文本文件的首个字符开始,查找所述换段符和/或换行符,若查找到第一个换段符和/或换行符,则将首个字符至第一个换段符和/或换行符之前的字符作为第一个单行文本文件,并将此单行文本文件编号为00。然后查找所述换段符和/或换行符,若查找到第二个换段符和/或换行符,则将所述第一个换段符和/或换行符与第二个换段符和/或换行符之间的字符作为第二个单行文本文件,并将此单行文本文件编号为01。按照上述查找方法,依次查询所述文本文件,直至查找到最后一个第一个换段符和/或换行符。并对所有单行文本文件进行编号。示例性的,将文本文件划分为单行文本文件可以通过如下语句来实现:flatmap(line->arrays.aslist(line.split("")).iterator())。s350、以字间隔符为第二分界符,划分所述至少一个单行文本文件,得到对应的字符文本。进一步的,以字间隔符为第二分界符,划分单行文本文件,得到对应的字符文本。即在单行文本文件中,从单行文本文件的首个字符开始,查找字间隔符,若查找到字间隔符,则按照预设的顺序将所述字符编码。示例性的,第一个单行文本文件中的第一个字符可以编码0000,第二个单行文本文件中的第一个字符可以编码0100。需要说明的是,本实施例中仅对字符的编码方式进行说明,而非限定。示例性的,将单行文本文件划分为字符文本并进行计算,可以通过如下语句来实现:lines.flatmap(line->arrays.aslist(line.split("")).iterator()).maptopair(word->newtuple2<string,integer>(word,1)).reducebykey((x,y)->x+y)。s360、通过外接函数从所述数据库连接池中申请并获取一个数据库连接。具体的,可以调用数据库连接的对外接口函数getconnect()获取数据库连接,该函数首先获取数据库连接时的队列锁。由此,可以保证同一时刻只有一个用户从数据库连接池获取数据库连接。进一步的,获取数据库连接池队列锁;判断所述队列是否为非空,若是,则提取队列的首个数据库连接返回至所述用户,将所述数据库连接从所述队列中删除;否则等待有空闲连接重新加入到数据库连接池队列的触发信号。上述实施例中,如果保存数据库连接的队列为空,说明当前没有空闲的数据库连接,等待触发信号进行唤醒。s370、通过获取的数据库连接将所述字符文本按照预设的顺序发送至目标数据库,以使所述目标数据库根据所述预设的顺序重组所述字符文本。在本实施例中,调用封装在数据库连接的接口函数,根据所述获取的数据库连接将所述字符文本按照预设的顺序发送至目标数据库,以使所述目标数据库根据所述预设的顺序重组所述字符文本。进一步的,当利用数据库连接完成数据处理后,调用数据库连接池的对外接口(conn.close)释放数据库连接,将数据库连接重新放入数据连接池队列,放入队列之前首先看数据连接池队列是否为空,如果为空,说明此时可能有正在等待空闲的数据库连接重新加入数据库连接池,因此,在释放数据库连接时,发出触发信号,在等待空闲数据库连接的用户将被唤醒,从而可以获取刚加入数据连接池的数据库连接进行数据库操作。进一步的,在本实施例中,还包括文本导入数据库过程中,遇到异常则抛出。本实施例中,异常抛出的方法通过如下程序来实现:catch(sqlexceptione){e.printstacktrace();}。图4为本发明实施例二提供的数据连接池的结构示意图。连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。如4所示,当线程一401需要用对一个数据库404进行操作时,将从连接池403中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务,例如:线程二402。通过建立一个数据库连接池以及一套连接使用、分配和管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。连接池的工作原理主要由三部分组成,分别为建立连接、管理连接和释放连接。当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。上述实施例提供的文本导入数据库的方法、装置、设备及存储介质,首先,通过间隔预设时间获取数据源的文本文件;然后划分文本文件,得到对应的字符文本;最后将字符文本按照预设的顺序发送至目标数据库,以使目标数据库根据预设的顺序重组字符文本。可见,本实施例提供的技术方案通过间隔预设时间获取文本文件,将大数据的文本文件按时间分成小的文本文件,然后对这小的文本文件进行处理,最后将处理后的文本文件发送至目标数据库,实现更好的适应数据挖掘和大数据处理。实施例三在上述实施例的基础上,本实施例提供一个优选实例,即使用sparkstreaming将数据写入mysql数据库。图5为本发明实施例三提供的使用sparkstreaming将数据写入mysql数据库的方法流程图。如图5所示,上述方法主要包括如下步骤:s510、在pom.xml中加入依赖包。pom是项目对象模型(projectobjectmodel)的简称,它是maven项目中的文件,使用xml表示,名称叫做pom.xml。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。在maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。s520、在mysql中搭建数据库和表。在本实施例中,若要将文本文件存入mysql数据库中,需要在mysql数据库中创建存储文本文件的数据分库或者表。本实施例中,通过createtablestreaming(itemvarchar(30),countint)语句来实现数据分库和表的创建。s530、使用java编写一个数据库连接池类。在本实施例中,通过java语言编写一个数据库连接池。本实施例中不对数据库连接池进行限定。可以根据需要设计或者选择合适的数据库连接池的编程。s540、使用springstreaming将数据处理写入mysql库。本实施例中,通过spark平台中的springstreaming将数据处理写入mysql库。spark是专为大规模数据处理而设计的快速通用的计算引擎。spark拥有hadoopmapreduce所具有的优点;但不同于mapreduce的是——job中间输出结果可以保存在内存中,从而不再需要读写hdfs,因此spark能更好地适用于数据挖掘和大数据量处理。spark采用内存处理机制,支持交互式计算和复杂算法。在处理大数据时将stream数据分成小的时间片断,以类似batch批量处理的方式来处理这小部分数据。最终将需要的结构化数据入库到关系型数据库,如mysql、oracle等。进一步的,在上述实施例的基础上,需要说明的是,sparkstreaming程序初始化时数据库连接池,sparkstreaming使用数据连接时向连接池类申请可用连接,sparkstreaming使用完毕数据连接后,将数据连接返还给连接池,sparkstreaming程序退出时,断开所有数据连接,并释放资源。实施例四图6是本发明实施例四中的文本导入数据库的装置的结构示意图,本实施例可适用于音频发送至第三方应用的情况,该文本导入数据库的装置可以通过软件和/或硬件的方式实现。设定文本导入数据库的装置集成在设备中。具体的,如图6所示,本实施例提供的文本导入数据库的装置的具体结构如下:文本获取模块610,用于间隔预设时间获取数据源的文本文件;文本划分模块620,用于划分所述文本文件,得到对应的字符文本;字符发送模块630,用于将所述字符文本按照预设的顺序发送至目标数据库,以使所述目标数据库根据所述预设的顺序重组所述字符文本。本实施例提供的文本导入数据库的装置,首先,通过间隔预设时间获取数据源的文本文件;然后划分文本文件,得到对应的字符文本;最后将字符文本按照预设的顺序发送至目标数据库,以使目标数据库根据预设的顺序重组字符文本。可见,本实施例提供的技术方案通过间隔预设时间获取文本文件,将大数据的文本文件按时间分成小的文本文件,然后对这小的文本文件进行处理,最后将处理后的文本文件发送至目标数据库,实现更好的适应数据挖掘和大数据处理。进一步的,所述文本导入数据库的装置还包括:连接池建立模块,用于建立访问所述数据库的数据库连接池;数据库连接创建模块,用于创建预设数量的访问所述数据库的数据库连接,并将所述数据库连接存放到所述数据库连接池中。进一步的,所述文本划分模块620包括:文本文件划分单元,用于以换段符、换行符为第一分界符,划分所述文本文件,得到至少一个单行文本文件;单行文本划分单元,以字间隔符为第二分界符,划分所述至少一个单行文本文件,得到对应的字符文本。进一步的,所述字符发送模块630包括:获取单元,用于通过外接函数从所述数据库连接池中申请并获取一个数据库连接;发送单元,用于通过获取的数据库连接将所述字符文本按照预设的顺序发送至目标数据库。具体的,所述获取的文本文件缓存在内存中。本发明实施例所提供的述文本导入数据库的装置可执行本发明任意实施例所提供的述文本导入数据库的方法,具备执行方法相应的功能模块和有益效果。实施例五图7为本发明实施例五提供的一种设备的结构示意图,如图7所示,该设备包括处理器710、存储器720、输入装置730和输出装置740;设备中处理器710的数量可以是一个或多个,图7中以一个处理器710为例;设备中的处理器710、存储器720、输入装置730和输出装置740可以通过总线或其他方式连接,图7中以通过总线连接为例。存储器720作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的文本导入数据库的方法对应的程序指令/模块(例如,文本导入数据库的装置中的文本获取模块610、文本划分模块620和字符发送模块630)。处理器710通过运行存储在存储器720中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的文本导入数据库的方法。存储器720可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器720可进一步包括相对于处理器710远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。输入装置730可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置740可包括显示屏等显示设备。实施例六本发明实施例六还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种文本导入数据库的方法,该方法包括:间隔预设时间获取数据源的文本文件;划分所述文本文件,得到对应的字符文本;将所述字符文本按照预设的顺序发送至目标数据库,以使所述目标数据库根据所述预设的顺序重组所述字符文本。当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的文本导入数据库的方法中的相关操作.通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。值得注意的是,上述文本导入数据库的装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1