CN106909554A - 一种数据库文本表数据的加载方法及装置 - Google Patents

一种数据库文本表数据的加载方法及装置 Download PDF

Info

Publication number
CN106909554A
CN106909554A CN201510974849.3A CN201510974849A CN106909554A CN 106909554 A CN106909554 A CN 106909554A CN 201510974849 A CN201510974849 A CN 201510974849A CN 106909554 A CN106909554 A CN 106909554A
Authority
CN
China
Prior art keywords
queue
data
read
text
line
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510974849.3A
Other languages
English (en)
Other versions
CN106909554B (zh
Inventor
张凤桥
高建军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bright Oceans Inter Telecom Co Ltd
Original Assignee
Bright Oceans Inter Telecom Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Bright Oceans Inter Telecom Co Ltd filed Critical Bright Oceans Inter Telecom Co Ltd
Priority to CN201510974849.3A priority Critical patent/CN106909554B/zh
Publication of CN106909554A publication Critical patent/CN106909554A/zh
Application granted granted Critical
Publication of CN106909554B publication Critical patent/CN106909554B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/254Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses

Abstract

本发明公开了一种内存数据库中文本表的数据加载方法及装置,所述方法包括:确定数据库中待加载的目标文本表,所述目标文本表包含N个文本文件,N为大于或等于1的正整数;在内存中创建N个第一队列,每个所述第一队列与每个所述文本文件之间具有一一映射的对应关系;对每个所述文本文件分别进行读操作,以将每个所述文本文件所读出的数据分别写入其各自对应的第一队列中;在内存中创建M个第二队列,M为大于或等于1的正整数;依次从N个所述第一队列中读取出数据,并将读取出的N个数据同时复制到每个所述第二队列中,其中,所述M个第二队列中的数据可被分别读取,用于各自对应的并发需求。

Description

一种数据库文本表数据的加载方法及装置
技术领域
本发明涉及数据库技术领域,特别涉及一种数据库中文本表数据的加载方法及装置。
背景技术
随着网络运维关联集中化程度的进一步提高,网管集成的应用功能不断增多,运维需要管理的数据量也迅速增大,对数据的多维度读取需求也不断出现。
而现有的传统数据库在面对数量级较大的并发需求时,通常是依次对每个并发任务提供数据加载,由此会存在运行负荷较大,对百万级、千万级及更大数据级数据的并行处理能力不足的问题;或者通过内存为每个并发任务同时提供数据加载,但会存在因过度消耗系统内存及I/O资源而大幅度降低数据加载效率的问题。
为此,目前亟需一种能够高效实现数据库数据的并行加载的技术方案。
发明内容
有鉴于此,本发明的目的在于提供一种内存数据库中文本表的数据加载方法及装置,用以解决现有技术中内存数据库中重复加载同一文本表时I/O资源消耗过大的技术问题。
本发明提供了一种数据库中文本表数据的加载方法,包括:
确定数据库中待加载的目标文本表,所述目标文本表包含N个文本文件,N为大于或等于1的正整数;
在内存中创建N个第一队列,每个所述第一队列与每个所述文本文件之间具有一一映射的对应关系;
对每个所述文本文件分别进行读操作;将每个所述文本文件所读出的数据分别写入其各自对应的第一队列中;
在内存中创建M个第二队列,M为大于或等于1的正整数;
依次从N个所述第一队列中读取出数据,并将读取出的N个数据同时复制到每个所述第二队列中,其中,所述M个第二队列中的数据可被分别读取,用于各自对应的并发需求。
上述方法,优选的,所述对每个所述文本文件分别进行读操作,具体包括:
从每个所述文本文件中逐行读取出字符串数据;
对每个所述文本文件中读取出的字符串数据进行解析,得到内存数据;
将每个所述文本文件所读出的内存数据分别写入其各自对应的第一队列中。
上述方法,优选的,依次从每个所述第一队列中读取出数据,并将每次读取出的数据同时复制到每个所述第二队列中,包括:
依次从N个所述第一队列中逐个逐行读取出数据;
将每次读取到的数据均同时写入到M个所述第二队列中。
上述方法,优选的,所述方法还包括:
在读取到所述文本文件的末尾时,在该文本文件对应的第一队列中写入结束标志。
上述方法,优选的,所述方法还包括:
在读取到每个所述第一队列的结束标志时,在每个所述第二队列中分别写入结束标志。
本发明还提供了一种数据库中文本表数据的加载装置,包括:
目标文本表确定单元,用于确定数据库中待加载的目标文本表,所述目标文本表包含N个文本文件,N为大于或等于1的正整数;
第一队列创建单元,用于在内存中创建N个第一队列,每个所述第一队列与每个所述文本文件之间具有一一映射的对应关系;
文件读取写入单元,用于对每个所述文本文件分别进行读操作,以将每个所述文本文件所读出的数据分别写入其各自对应的第一队列中;
第二队列创建单元,用于在内存中创建M个第二队列,,M为大于或等于1的正整数;
队列读取写入单元,用于依次从每个所述第一队列中读取出数据,并将读取出的N个数据复制到每个所述第二队列中,其中,所述M个第二队列中的数据可被分别读取,用于各自对应的并发需求。
上述装置,优选的,所述文件读取写入单元包括:
字符串读取子单元,用于从每个所述文本文件中逐行读取出字符串数据;
字符串解析子单元,用于对每个所述文本文件中读取出的字符串数据进行解析,得到内存数据;
内存数据写入子单元,用于将每个所述文本文件所读出的内存数据分别写入其各自对应的第一队列中。
上述装置,优选的,所述队列读取写入单元包括:
第一队列读出子单元,用于依次从N个所述第一队列中逐个逐行读取出数据;
第二队列写入子单元,用于将每次读取到的数据同时写入到M个所述第二队列中。
上述装置,优选的,还包括:
第一标志写入单元,用于所述文件读取写入单元读取到所述文本文件的末尾时,在该文本文件对应的第一队列中写入结束标志。
上述装置,优选的,还包括:
第二标志写入单元,用于在所述队列读取写入单元在读取到每个所述第一队列的结束标志时,在每个所述第二队列中分别写入结束标志。
由上述方案可知,本发明提供的一种数据库中文本表数据的加载方法及装置,通过将文本表中的每个文本文件进行并行读取到相应的第一队列之后,依次从每个第一队列中读取出数据同时写到预先创建的多个第二队列中,而这些第二队列中的数据可以被分别读取出用于各自对应的并发需求,完成文本表中数据的加载,满足多个应用或任务所需要的数据处理需求。这一过程中本发明通过设置与文本表中文本个数同等数量的第一队列来收集文本文件所读取出的数据,进而再写入可为多个应用或任务同时读取的第二队列中,实现多文件并发读取,采用异步一对多队列的方式,实现一次读取后供多个任务或线程的同时读取,实现数据共享机制,完成每个任务或线程对文本表中每个文本文件的加载任务,提高数据加载效率,降低多文件并发读取过程中对I/O资源的消耗,进一步提高数据处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为现有技术中文本表的数据加载示例图;
图2为本发明实施例一种提供的一种数据库中文本表数据的加载方法的流程图;
图3为本发明实施例的应用示例图;
图4a~图4f分别为本发明实施例的其他应用示例图;
图5为本发明实施例二提供的一种数据库中文本表数据的加载方法的部分流程图;
图6为本发明实施例三提供的一种数据库中文本表数据的加载方法的部分流程图;
图7为本发明实施例四提供的一种数据库中文本表数据的加载方法的实现流程图;
图8为本发明实施例四的另一流程图;
图9为本发明实施例五提供的一种数据库中文本表数据的加载装置的结构示意图;
图10为本发明实施例六提供的一种数据库中文本表数据的加载装置的部分结构示意图;
图11为本发明实施例七提供的一种数据库中文本表数据的加载装置的部分结构示意图;
图12为本发明实施例八提供的一种数据库中文本表数据的加载装置的结构示意图;
图13为本发明实施例八的另一结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现有其他数据库的加载文本表数据的原理比较简单,即每个SQL执行线程,会初始化自己的文件读取器。文件读取器负责从文本文件中逐行读取字符串数据,并解析为一行结构化的内存数据;如果该文本表关联的是一个文件列表(1个以上的文本文件),则文件读取器依次读取每个文件;如果同时执行的多个SQL执行线程(即多个SQL语句),用到了同一个文本表,则每个执行线程的文件读取器会重复读取这个文本表对应的多个文件,如图1中所示,由此造成重复加载,对I/O资源消耗过大;而当用缓存的方式解决复用时,如果缓存设置过大对内存消耗还是过大,而缓存设置小时,效率显著下降,仍然无法解决问题。
参考图2,为本发明实施例一种提供的一种数据库中文本表数据的加载方法的实现流程图,其中,本实施例的目的在于将数据库中的文本表数据提供给每个并发需求,即为完成每个并发需求对文本表中所有文本文件的数据加载需求。具体的,所述方法可以包括以下步骤:
步骤201:确定数据库中待加载的目标文本表。
其中,所述目标文本表包含N个文本文件,N为大于或等于1的正整数。
步骤202:在内存中创建N个第一队列。
其中,每个所述第一队列与每个所述文本文件之间具有一一映射的对应关系,如图3中所示,N个文本文件与N个第一队列中,文本文件1对应第一队列1,文本文件2对应第一队列2,以此类推,文本文件N对应第一队列N。也就是说,本实施例中可以创建多个第一队列,所述第一队列的数量与该目标文本表中需要加载的文本文件的数量相同,进而所述目标文本表中的每个文本文件均对应一个所述第一队列。
步骤203:对每个所述文本文件分别进行读操作,以将每个所述文本文件所读出的数据分别写入其各自对应的第一队列中。
也就是说,每个所述文本文件各自被读取出的数据会别写入到该文本文件对应的第一队列中,如图4a中所示,以实现多文本文件TextFile的并发读取。
步骤204:在内存中创建M个第二队列。
其中,M为大于或等于1的正整数,这里所述第二队列的个数可以根据并发需求的个数相一致,也就是说,每个并发需求可以分别对应一个第二队列。
步骤205:依次从N个所述第一队列中读取出数据,并将读取出的N个数据同时复制到每个所述第二队列中。
其中,所述M个第二队列中的数据可被分别读取,具体可以被相应的并发需求的队列读取器读取相应第二队列中的数据,被读取出的M个数据可以用于各自对应的并发需求,需要说明的是,这里M个数据中每个数据即为前文中从N个第一队列中所读取出的所有数据。
也就是说,本实施例中依次对所有所述第一队列中的数据进行读取,并将每次读取到的数据都会在每个所述第二队列进行写入一次,这样,每个所述第二队列中的数据都是相同的,最后每个所述第二队列中的数据是包含有上述目标文本表中所有文本文件中所读取出的数据的,如图4b中所示,每个所述第二队列中包含第1~N个第一队列中所读取出的所有数据。
其中,所述队列读取器可以理解为需要加载所述目标文本表中文本文件的任务或者线程的表数据队列读取器,用以读取相应第二队列中的数据,之后,每个任务或线程如SQL执行线程等,通过表数据读取器逐行读取结构化的行数据,之后再完成SQL语句的后续查询、关联等其他工作,进而结束数据的加载流程,完成数据加载。
由上述方案可知,本发明实施例一提供的一种数据库中文本表数据的加载方法,通过将文本表中的每个文本文件进行并行读取到相应的第一队列之后,依次从每个第一队列中读取出数据同时写到预先创建的多个第二队列中,而这些第二队列中的数据可以被分别读取出用于各自对应的并发需求,完成文本表中数据的加载,满足多个应用或任务所需要的数据处理需求。这一过程中本发明通过设置与文本表中文本个数同等数量的第一队列来收集文本文件所读取出的数据,进而再写入可为多个应用或任务同时读取的第二队列中,实现多文件并发读取,采用异步一对多队列的方式,实现一次读取后供多个任务或线程的同时读取,实现数据共享机制,完成每个任务或线程对文本表中每个文本文件的加载任务,提高数据加载效率,降低多文件并发读取过程中对I/O资源的消耗,进一步提高数据处理效率。
参考图5,为本发明实施例二提供的一种数据库中文本表数据的加载方法中所述步骤203的实现流程图,其中,所述步骤203可以通过以下步骤实现:
步骤231:从每个所述文本文件中逐行读取出字符串数据。
具体的,本实施例中可以利用文件读取线程实现从每个所述文本文件中逐行读取字符串数据的工作,如图4c中所示,所述文件读取线程对N个文本文件进行逐行读取字符串数据。
步骤232:对每个所述文本文件中读取出的字符串数据进行解析,得到内存数据。
具体的,这里的内存数据为行结构的数据结构,以便于本实施例中在得到这些内存数据之后能够在系统内存中进行存储。
步骤233:将每个所述文本文件所读出的内存数据分别写入其各自对应的第一队列中。
如图4d中所示,本实施例中可以利用所述文件读取线程将得到的内存数据写入到相应的第一队列中。
参考图6,为本发明实施例三提供的一种数据库中文本表数据的加载方法中所述步骤205的实现流程图,其中,所述步骤205可以通过以下步骤实现:
步骤251:依次从N个所述第一队列中逐个逐行读取出数据。
步骤252:将每次读取到的数据均同时写入到M个所述第二队列中。
具体的,本实施例中可以利用表数据共享线程依队列顺序依次从N个所述第一队列中逐行读取所述数据,每读取到一行数据之后,将该读取到的数据同时写入到M个所述第二队列中。
如图4e中所示,所述表数据共享线程每次读取一个第一队列的一行未读取的数据,将此时读取到的数据写入到M个第二队列中的每个队列,之后,读取下一个第一队列的一行未被读取的数据,将此时读取到的数据写入到M个第二队列中的每个队列,以此类推,直到将每个所述第一队列中的数据均读取并写入到每个所述第二队列中。
具体的,本实施例中可以采用先进先出的读取策略,实现对文本文件或读取队列中的数据的读取。
参考图7,为本发明实施例四提供的一种数据库中文本表数据的加载方法的实现流程图,其中,在所述步骤203中读取所述文本文件中的数据时,所述方法还可以包括以下步骤:
步骤206:在读取到所述文本文件的末尾时,在该文本文件对应的第一队列中写入结束标志。
也就是说,本实施例中利用所述文件读取线程读取每个所述文本文件时,在发现所述文本文件中的字符串数据均已经被读取无法再读取出内存数据时,所述文件读取线程可以在相应的第一队列中写入结束标志,以表示所述读取队列完成写入操作。
相应的,参考图8,为本发明实施例四的另一流程图,其中,在所述步骤205读取所述第一队列中的数据时,所述方法还可以包括以下步骤:
步骤207:在读取到每个所述第一队列的结束标志时,在每个所述第二队列中分别写入结束标志。
也就是说,本实施例中利用表数据共享线程在读取每个所述第一队列中的数据时,只有在读取到所有第一队列中的结束标志时,表明所有所述第一队列中的所有数据均被读取,此时,直接在每个所述第二队列中写入结束标志,表明所述第一队列中的数据全部被读取出,并写入每个所述第二队列中,进而M个所述第二队列中的数据可以被相应的并发需求进行读取,具体的,通过每个并发需求的队列读取器从其对应的第二队列中依次读取数据,以满足并发需求。
参考图9,为本发明实施例五提供的一种数据库中文本表数据的加载装置的结构示意图,其中,所述装置的目的在于将数据库中的文本表数据提供给每个并发需求,即为完成每个并发需求对文本表中所有文本文件的数据加载需求。具体的,所述装置可以包括以下结构:
目标文本表确定单元901,用于确定数据库中待加载的目标文本表。
其中,所述目标文本表包含N个文本文件,N为大于或等于1的正整数。
第一队列创建单元902,用于在内存中创建N个第一队列。
其中,每个所述第一队列与每个所述文本文件之间具有一一映射的对应关系,如图3中所示,N个文本文件与N个第一队列中,文本文件1对应第一队列1,文本文件2对应第一队列2,以此类推,文本文件N对应第一队列N。也就是说,本实施例中可以创建多个第一队列,所述第一队列的数量与该目标文本表中需要加载的文本文件的数量相同,进而所述目标文本表中的每个文本文件均对应一个所述第一队列。
文件读取写入单元903,用于对每个所述文本文件分别进行读操作,以将每个所述文本文件所读取出的数据分别写入其各自对应的第一队列中。
也就是说,每个所述文本文件各自被读取出的数据会别写入到该文本文件对应的第一队列中,如图4a中所示,以实现多文本文件的并发读取。
第二队列创建单元904,用于在内存中创建M个第二队列。
其中,M为大于或等于1的正整数,这里所述第二队列的个数可以根据并发需求的个数相一致,也就是说,每个并发需求可以分别对应一个第二队列。
队列读取写入单元905,用于依次从每个所述第一队列中读取出数据,并将读取出的N个数据同时复制到每个所述第二队列中。
其中,所述M个第二队列中的数据可被分别读取,具体可以被相应的并发需求的队列读取器读取相应第二队列中的数据,被读取出的M个数据可以用于各自对应的并发需求,需要说明的是,这里M个数据中每个数据即为前文中从N个第一队列中所读取出的所有数据。
也就是说,本实施例中依次对所有所述第一队列中的数据进行读取,并将每次读取到的数据都会在每个所述第二队列进行写入一次,这样,每个所述第二队列中的数据都是相同的,最后每个所述第二队列中的数据是包含有上述目标文本表中所有文本文件中所读取出的数据的,如图4b中所示,每个所述第二队列中包含第1~N个第一队列中所读取出的所有数据。
其中,所述队列读取器可以理解为需要加载所述目标文本表中文本文件的任务或者线程的表数据队列读取器,用以读取相应第二队列中的数据,之后,每个任务或线程如SQL执行线程等,通过表数据读取器逐行读取结构化的行数据,之后再完成SQL语句的后续查询、关联等其他工作,进而结束数据的加载流程,完成数据加载。
由上述方案可知,本发明实施例五提供的一种数据库中文本表数据的加载装置,通过将文本表中的每个文本文件进行并行读取到相应的第一队列之后,依次从每个第一队列中读取出数据同时写到预先创建的多个第二队列中,而这些第二队列中的数据可以被分别读取出用于各自对应的并发需求,完成文本表中数据的加载,满足多个应用或任务所需要的数据处理需求。这一过程中本发明通过设置与文本表中文本个数同等数量的第一队列来收集文本文件所读取出的数据,进而再写入可为多个应用或任务同时读取的第二队列中,实现多文件并发读取,采用异步一对多队列的方式,实现一次读取后供多个任务或线程的同时读取,实现数据共享机制,完成每个任务或线程对文本表中每个文本文件的加载任务,提高数据加载效率,降低多文件并发读取过程中对I/O资源的消耗,进一步提高数据处理效率。
参考图10,为本发明实施例六提供的一种数据库中文本表数据的加载装置中所述文件读取写入单元903的结构示意图,其中,所述文件读取写入单元903可以包括以下结构:
字符串读取子单元931,用于从每个所述文本文件中逐行读取出字符串数据。
具体的,本实施例中可以利用文件读取线程实现从每个所述文本文件中逐行读取字符串数据的工作,如图4c中所示,所述文件读取线程对N个文本文件进行逐行读取字符串数据。
字符串解析子单元932,用于对每个所述文本文件中读取出的字符串数据进行解析,得到内存数据。
具体的,这里的内存数据为行结构的数据结构,以便于本实施例中在得到这些内存数据之后能够在系统内存中进行存储。
内存数据写入子单元933,用于将每个所述文本文件所读出的内存数据分别写入其各自对应的第一队列中。
如图4d中所示,本实施例中可以利用所述文件读取线程将得到的内存数据写入到相应的第一队列中。
参考图11,为本发明实施例七提供的一种数据库中文本表数据的加载装置中所述队列读取写入单元905的结构示意图,其中,所述队列读取写入单元905可以包括以下结构:
第一队列读出子单元951,用于依次从N个所述第一队列中逐个逐行读取出数据。
第二队列写入子单元952,用于将每次读取到的数据均同时写入到M个所述第二队列中。
具体的,本实施例中可以利用表数据共享线程依队列顺序依次从N个所述第一队列中逐行读取所述数据,每读取到一行所述数据之后,将该读取到的数据同时写入到M个所述第二队列中。
如图4e中所示,所述表数据共享线程每次读取一个第一队列的一行未读取的数据,将此时读取到的数据写入到M个第二队列中的每个队列,之后,读取下一个第一队列的一行未被读取的数据,将此时读取到的数据写入到M个第二队列中的每个队列,以此类推,直到将每个所述第一队列中的数据均读取并写入到每个所述第二队列中。
具体的,本实施例中可以采用先进先出的读取策略,实现对文本文件或读取队列中的数据的读取。
参考图12,为本发明实施例八提供的一种数据库中文本表数据的加载装置的结构示意图,其中,所述装置还可以包括以下结构:
第一标志写入单元906,用于所述文件读取写入单元903读取到所述文本文件的末尾时,在该文本文件对应的第一队列中写入结束标志。
也就是说,本实施例中利用所述文件读取线程读取每个所述文本文件时,在发现所述文本文件中的字符串数据均已经被读取无法再读取出内存数据时,所述文件读取线程可以在相应的第一队列中写入结束标志,以表示所述读取队列完成写入操作。
相应的,参考图13,为本发明实施例八的另一结构示意图,其中,所述装置还可以包括以下结构:
第二标志写入单元907,用于在所述队列读取写入单元905在读取到每个所述第一队列的结束标志时,在每个所述第二队列中分别写入结束标志。
也就是说,本实施例中利用表数据共享线程在读取每个所述第一队列中的数据时,只有在读取到所有第一队列中的结束标志时,表明所有所述第一队列中的所有数据均被读取,此时,直接在每个所述第二队列中写入结束标志,表明所述第一队列中的数据全部被读取出,并写入每个所述第二队列中,进而M个所述第二队列中的数据可以被相应的并发需求进行读取,具体的,通过每个并发需求的队列读取器从其对应的第二队列中依次读取数据,以满足并发需求。
以图4f中文本表中N个文本文件的加载过程为例,本实施例中,当前文本表中关联的文件列表包括了N个文本文件,同时有M个SQL语句用到该文本表,本实施例以图示中批量SQL语句管理器(批量执行SQL语句的总控模块)实现。
具体的,所示批量SQL语句管理器负责初始化N个读取队列、N个文件读取线程、1个表数据共享线程、M个共享队列、M个队列读取器、M个SQL执行线程。
首先,每个文件读取线程负责从一个文本文件中逐行逐行读取字符串数据,并解析为一行结构化的内存数据,写入到读取队列中。当读取到文件末尾时,向读取队列中写入结束标志。
其次,表数据共享线程依次从N个读取队列中逐行读取解析后的行数据,每读取一行数据,则同时向M个共享队列中写入数据;当N个读取队列中都有结束标志后,则判断为整个文本表读取结束,此时同时向M个共享队列中写入结束标志。
再次,每个表数据队列读取器负责从对应的一个共享队列中依次读取结构化后的行数据,直到读取到结束标志。
最后,每个SQL执行线程,通过表数据读取器逐行读取结构化后的行数据,之后再完成SQL语句的后续查询、关联等其他工作,完成数据的加载。
由上述实例可以看出,本发明中的技术方案对于同一文本表中的多文件通过并发加载方式,有效提高对文本表的数据读取效率,并且,对同一文本表,采用异步一对多队列的方式,实现一次读取后供多个任务或线程的同时读取,实现了数据的共享机制,对于多个SQL查询同时使用同一文本表的情况下,显著降低了对I/O资源的消耗。与此同时,本发明中的技术方案对内存资源的消耗非常小,并不会随着文本表的数量增加而增加,因为内存的消耗只与读取队列与共享队列的数量和长度有关,与文件的大小没有直接关系。
以下结合集中故障管理系统中的告警统计场景,说明如何利用本发明具体实现文本表的高效数据加载。
集中故障管理系统中,每天都会实时接收和处理通信网络汇总的的大量告警信息(比较大的省份每天会有200~500万的告警量),存储在核心告警库的告警表(tfa_alarm)里,为支撑对大量告警信息分析,每天早晨都需要对前一天的告警数据生成众多指标的统计报表。而且针对大数据量的复杂统计分析,会造成核心告警库的负担过重,会严重影响集中故障系统的实时监控和处理,所以针对告警统计报表的处理方式是每天先从核心告警库的告警表里导出前一天的告警数据,由于数据量大,会生成多个csv格式的文件(这里假定为5个文件:tfa_alarm_1.csv,...,tfa_alarm_5.csv);然后把导出的csv文件作为输入,在内存库GSQL中完成后续的统计分析,在内存库中建立的告警文本表为tfa_alarm_txt,具体说明如下:
tfa_alarm_txt表的相关字段说明:
统计需求:
为便于理解,针对以上需求中的3个SQL语句,在数据库系统中的简单实现原理说明一下:select子句部分的功能是完成表达式的统计计算最终形成输出结果,from子句完成对表数据的读取(包括随机读取和顺序读取,对于文本表的情况只有顺序读取),where子句完成搜索或过滤条件,group by子句完成分组条件。
与本发明相关部分为from子句,也是三个SQL语句的相同部分,即主要完成对表tfa_alarm_txt数据的读取;其余子句的实现原理部分,以下说明不做详细说明。
依据以上需求和场景说明,得到了两个关键参数:一是构成tfa_alarm_txt的文本文件数量为5个;二是需要执行的SQL语句为3个,而且这三个SQL语句的相同之处就是都用到了相同的表tfa_alarm_txt。针对以上信息,具体实现步骤如下:
1)“批量SQL语句管理器”,负责初始化5个读取队列、5个文件读取线程、1个表数据共享线程、3个共享队列、3个队列读取器、3个SQL执行线程。
3)“文件读取线程1”负责从文件tfa_alarm_1.csv中逐行逐行读取字符串数据,并解析为一行结构化的内存数据,写入到“读取队列1”中。当读取到文件末尾时,向读队列中写入结束标志。。。。,“文件读取线程5”负责从文件tfa_alarm_5.csv中逐行逐行读取字符串数据,写入到“读取队列5”中。
4)“表数据共享线程”依次从5个队列中逐行读取解析后的行数据,每读取一行数据,则同时向3个共享队列中写入数据;当5个读取队列中都有结束标志后,则判断为整个文本表读取结束,此时同时向3个共享队列中写入结束标志。
5)“SQL执行线程1”通过调用“队列读取器1”从“共享队列1”读取结构化后的行数据,完成SQL1的from子句的功能。。。;“SQL执行线程3”通过调用“队列读取器3”从“共享队列3”读取结构化后的行数据,完成SQL3的from子句的功能;以此类推。
本实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种数据库中文本表数据的加载方法,其特征在于,包括:
确定数据库中待加载的目标文本表,所述目标文本表包含N个文本文件,N为大于或等于1的正整数;
在内存中创建N个第一队列,每个所述第一队列与每个所述文本文件之间具有一一映射的对应关系;
对每个所述文本文件分别进行读操作,以将每个所述文本文件所读出的数据分别写入其各自对应的第一队列中;
在内存中创建M个第二队列,M为大于或等于1的正整数;
依次从N个所述第一队列中读取出数据,并将读取出的N个数据同时复制到每个所述第二队列中,其中,所述M个第二队列中的数据可被分别读取,用于各自对应的并发需求。
2.根据权利要求1所述的方法,其特征在于,所述对每个所述文本文件分别进行读操作,以将每个所述文本文件所读出的数据分别写入其各自对应的第一队列中,具体包括:
从每个所述文本文件中逐行读取出字符串数据;
对每个所述文本文件中读取出的字符串数据进行解析,得到内存数据;
将每个所述文本文件所读出的内存数据分别写入其各自对应的第一队列中。
3.根据权利要求1所述的方法,其特征在于,依次从每个所述第一队列中读取出数据,并将每次读取出的数据同时复制到每个所述第二队列中,包括:
依次从N个所述第一队列中逐个逐行读取出数据;
将每次读取到的数据均同时写入到M个所述第二队列中。
4.根据权利要求1、2或3所述的方法,其特征在于,所述方法还包括:
在读取到所述文本文件的末尾时,在该文本文件对应的第一队列中写入结束标志。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在读取到每个所述第一队列的结束标志时,在每个所述第二队列中分别写入结束标志。
6.一种数据库中文本表数据的加载装置,其特征在于,包括:
目标文本表确定单元,用于确定数据库中待加载的目标文本表,所述目标文本表包含N个文本文件,N为大于或等于1的正整数;
第一队列创建单元,用于在内存中创建N个第一队列,每个所述第一队列与每个所述文本文件之间具有一一映射的对应关系;
文件读取写入单元,用于对每个所述文本文件分别进行读操作,以将每个所述文本文件所读出的数据分别写入其各自对应的第一队列中;
第二队列创建单元,用于在内存中创建M个第二队列,,M为大于或等于1的正整数;
队列读取写入单元,用于依次从每个所述第一队列中读取出数据,并将读取出的N个数据同时复制到每个所述第二队列中,其中,所述M个第二队列中的数据可被分别读取,用于各自对应的并发需求。
7.根据权利要求6所述的装置,其特征在于,所述文件读取写入单元包括:
字符串读取子单元,用于从每个所述文本文件中逐行读取出字符串数据;
字符串解析子单元,用于对每个所述文本文件中读取出的字符串数据进行解析,得到内存数据;
内存数据写入子单元,用于将每个所述文本文件所读出的内存数据分别写入其各自对应的第一队列中。
8.根据权利要求6所述的装置,其特征在于,所述队列读取写入单元包括:
第一队列读出子单元,用于依次从N个所述第一队列中逐个逐行读取出数据;
第二队列写入子单元,用于将每次读取到的数据同时写入到M个所述第二队列中。
9.根据权利要求6、7或8所述的装置,其特征在于,还包括:
第一标志写入单元,用于所述文件读取写入单元读取到所述文本文件的末尾时,在该文本文件对应的第一队列中写入结束标志。
10.根据权利要求9所述的装置,其特征在于,还包括:
第二标志写入单元,用于在所述队列读取写入单元在读取到每个所述第一队列的结束标志时,在每个所述第二队列中分别写入结束标志。
CN201510974849.3A 2015-12-22 2015-12-22 一种数据库文本表数据的加载方法及装置 Active CN106909554B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510974849.3A CN106909554B (zh) 2015-12-22 2015-12-22 一种数据库文本表数据的加载方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510974849.3A CN106909554B (zh) 2015-12-22 2015-12-22 一种数据库文本表数据的加载方法及装置

Publications (2)

Publication Number Publication Date
CN106909554A true CN106909554A (zh) 2017-06-30
CN106909554B CN106909554B (zh) 2020-08-04

Family

ID=59199889

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510974849.3A Active CN106909554B (zh) 2015-12-22 2015-12-22 一种数据库文本表数据的加载方法及装置

Country Status (1)

Country Link
CN (1) CN106909554B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107357868A (zh) * 2017-07-03 2017-11-17 华通信安(北京)科技发展有限公司 一种matlab数据格式的快速转换方法和装置
CN108009142A (zh) * 2017-11-30 2018-05-08 努比亚技术有限公司 数据报表导出方法、服务器及计算机可读存储介质
CN109325002A (zh) * 2018-09-03 2019-02-12 北京京东金融科技控股有限公司 文本文件处理方法、装置、系统、电子设备、存储介质
CN110275918A (zh) * 2019-06-17 2019-09-24 浙江百应科技有限公司 一种百万级别excel数据快速平稳导入系统
CN110673786A (zh) * 2019-09-03 2020-01-10 浪潮电子信息产业股份有限公司 数据缓存的方法和装置
CN110765232A (zh) * 2019-10-11 2020-02-07 平安医疗健康管理股份有限公司 数据处理方法、装置、计算机设备和存储介质
CN112114730A (zh) * 2020-09-15 2020-12-22 北京点众科技股份有限公司 电子终端的翻页方法、装置和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060286A1 (en) * 2003-09-15 2005-03-17 Microsoft Corporation Free text search within a relational database
CN102207891A (zh) * 2011-06-10 2011-10-05 浙江大学 对数据划分分布式环境实现动态划分和负载均衡的方法
CN103049533A (zh) * 2012-12-23 2013-04-17 北京人大金仓信息技术股份有限公司 一种快速向数据库加载数据的方法
CN103885986A (zh) * 2012-12-21 2014-06-25 阿里巴巴集团控股有限公司 主备数据库同步的方法和装置
CN104376082A (zh) * 2014-11-18 2015-02-25 中国建设银行股份有限公司 一种把数据源文件中的数据导入到数据库中的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060286A1 (en) * 2003-09-15 2005-03-17 Microsoft Corporation Free text search within a relational database
CN102207891A (zh) * 2011-06-10 2011-10-05 浙江大学 对数据划分分布式环境实现动态划分和负载均衡的方法
CN103885986A (zh) * 2012-12-21 2014-06-25 阿里巴巴集团控股有限公司 主备数据库同步的方法和装置
CN103049533A (zh) * 2012-12-23 2013-04-17 北京人大金仓信息技术股份有限公司 一种快速向数据库加载数据的方法
CN104376082A (zh) * 2014-11-18 2015-02-25 中国建设银行股份有限公司 一种把数据源文件中的数据导入到数据库中的方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107357868A (zh) * 2017-07-03 2017-11-17 华通信安(北京)科技发展有限公司 一种matlab数据格式的快速转换方法和装置
CN108009142A (zh) * 2017-11-30 2018-05-08 努比亚技术有限公司 数据报表导出方法、服务器及计算机可读存储介质
CN109325002A (zh) * 2018-09-03 2019-02-12 北京京东金融科技控股有限公司 文本文件处理方法、装置、系统、电子设备、存储介质
CN109325002B (zh) * 2018-09-03 2021-03-05 北京京东金融科技控股有限公司 文本文件处理方法、装置、系统、电子设备、存储介质
CN110275918A (zh) * 2019-06-17 2019-09-24 浙江百应科技有限公司 一种百万级别excel数据快速平稳导入系统
CN110673786A (zh) * 2019-09-03 2020-01-10 浪潮电子信息产业股份有限公司 数据缓存的方法和装置
US11803475B2 (en) 2019-09-03 2023-10-31 Inspur Electronic Information Industry Co., Ltd. Method and apparatus for data caching
CN110765232A (zh) * 2019-10-11 2020-02-07 平安医疗健康管理股份有限公司 数据处理方法、装置、计算机设备和存储介质
CN110765232B (zh) * 2019-10-11 2023-03-21 深圳平安医疗健康科技服务有限公司 数据处理方法、装置、计算机设备和存储介质
CN112114730A (zh) * 2020-09-15 2020-12-22 北京点众科技股份有限公司 电子终端的翻页方法、装置和存储介质
CN112114730B (zh) * 2020-09-15 2022-04-08 北京点众科技股份有限公司 电子终端的翻页方法、装置和存储介质

Also Published As

Publication number Publication date
CN106909554B (zh) 2020-08-04

Similar Documents

Publication Publication Date Title
CN106909554A (zh) 一种数据库文本表数据的加载方法及装置
CN110990638B (zh) 基于fpga-cpu异构环境的大规模数据查询加速装置及方法
US10176092B2 (en) System and method for executing data processing tasks using resilient distributed datasets (RDDs) in a storage device
US8972337B1 (en) Efficient query processing in columnar databases using bloom filters
US20130227194A1 (en) Active non-volatile memory post-processing
US20160335304A1 (en) Data partitioning and ordering
US20070198566A1 (en) Method and apparatus for efficient storage of hierarchical signal names
CA2795525C (en) Columnar storage representations of records
Fraczek et al. Comparative analysis of relational and non-relational databases in the context of performance in web applications
CN111258966A (zh) 一种数据去重方法、装置、设备及存储介质
US20120158742A1 (en) Managing documents using weighted prevalence data for statements
US8510306B2 (en) Faceted search with relationships between categories
You et al. Spatial join query processing in cloud: Analyzing design choices and performance comparisons
Silva et al. Integrating big data into the computing curricula
KR102465391B1 (ko) 실시간으로 데이터의 증가 속도에 따라 데이터 처리 주기를 설정하는 시스템의 분석 방법
Miller et al. Open source big data analytics frameworks written in scala
WO2024055571A1 (zh) 一种namespace设置方法、装置及可读存储介质
WO2017107130A1 (zh) 数据查询方法和数据库系统
CN105830160A (zh) 用于将经屏蔽数据写入到缓冲器的设备及方法
US8321429B2 (en) Accelerating queries using secondary semantic column enumeration
CN116089535A (zh) 数据同步方法、装置、设备及存储介质
US9305080B2 (en) Accelerating queries using delayed value projection of enumerated storage
Ding et al. HB-file: An efficient and effective high-dimensional big data storage structure based on US-ELM
CN115114297A (zh) 数据轻量存储及查找方法、装置、电子设备及存储介质
CN110647518B (zh) 一种数据源融合计算方法、组件及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant