CN104484456A - 一种基于多线程并行的SQLite数据库快速加载方法 - Google Patents
一种基于多线程并行的SQLite数据库快速加载方法 Download PDFInfo
- Publication number
- CN104484456A CN104484456A CN201410835366.0A CN201410835366A CN104484456A CN 104484456 A CN104484456 A CN 104484456A CN 201410835366 A CN201410835366 A CN 201410835366A CN 104484456 A CN104484456 A CN 104484456A
- Authority
- CN
- China
- Prior art keywords
- thread
- database
- data
- loaded
- loading
- 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.)
- Pending
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 88
- 238000000034 method Methods 0.000 claims abstract description 36
- 230000008569 process Effects 0.000 claims abstract description 28
- 238000004891 communication Methods 0.000 claims abstract description 3
- 230000008676 import Effects 0.000 claims description 14
- 125000004122 cyclic group Chemical group 0.000 claims description 8
- 230000001360 synchronised effect Effects 0.000 claims 2
- 230000006870 function Effects 0.000 description 27
- 238000002474 experimental method Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008092 positive effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种基于多线程并行的SQLite数据库快速加载方法,本发明涉及基于多线程并行的SQLite数据库快速加载方法。本发明的目的为了解决现有技术数据加载消耗大量时间的问题。一种基于多线程并行的SQLite数据库快速加载方法具体是按照以下步骤进行的:步骤一、在需要加载SQLite数据库的进程中,创建SQLite数据库快速载入主线程,并启动主线程进入工作状态;步骤二、建立N条子线程的加载完成标识数组;步骤三、创建N条子线程SQLite数据库快速载入子线程;步骤四、同步进行数据加载;步骤五、启动子线程从Load1到LoadN;步骤六、当每一个线程都为TRUE,主线程结束;本发明应用于网络通信领域。
Description
技术领域
本发明涉及基于多线程并行的SQLite数据库快速加载方法。
背景技术
SQLite数据库是一种基于关系类型设计的文件数据库,它的设计目的主要是应用于嵌入式开发。由于其具有运行空间小、占用资源低且安装配置简单等优势,因此在嵌入式设备开发、智能手机软件开发等领域都有广泛的应用。
SQLite数据库支持多种开发语言,如C,C++,PHP,Perl,Java,C#,Python,Ruby等,方便用户根据实际需求开发个人应用程序。与现阶段一些流行的数据库有所不同,SQLite数据库与个人用户开发的应用程序并不工作于一种客户端与服务器的交互模式。而是形成一种将SQLite数据库的操作引擎以一种动态数据库的形式连接到个人应用程序中的组合模式。因此数据库文件与用户应用程序之间的数据通信是在编程语言内直接调用API实现的。这在消耗总量、延迟时间和整体简单性上有积极的作用。
对于传统SQLite数据库加载流程以及基于C语言的API调用过程由图2给出。在获取二维数据表操作指针后,希望建立数组将存储在硬盘中SQLite数据库文件中数据转存入内存数据块中。传统意义利用该指针从头至尾依次加载数据,即存储指针当前指向数据后,指针后移一位存储下一位数据,直至指针移动至数据表最后一位完成整个数据表的加载。
然而这种方式在数据库文件较大,数据量存储较多的情况下,数据加载消耗大量时间。特别是当今大数据时代,传统的SQLite数据库读取方式显然并不适用。因此非常需要一种新型的加载方式以实现SQLite数据库在个人应用程序中快速读取。
发明内容
本发明的目的为了解决现有技术数据加载消耗大量时间的问题,而提出了一种基于多线程并行的SQLite数据库快速加载方法。
步骤一、在需要加载SQLite数据库的进程中,创建SQLite数据库快速载入主线程,并启动主线程进入工作状态;若主线程启动失败,则重新启动;
步骤二、主线程进入工作状态,建立N条子线程、数据类型为布尔类型的加载完成标识数组,命名为M_Flag;
步骤三、创建N条子线程SQLite数据库快速载入子线程,线程名称依次为Load1,Load2…LoadN;
步骤四、获取需要加载SQLite数据库的文件包含的数据表的大小,并将需要加载的SQLite数据库的文件包含的数据表N等分,分配给上一步已经创建好的N条子线程SQLite数据库快速载入子线程同步进行数据加载;
步骤五、启动所有的N条子线程SQLite数据库快速载入子线程从Load到LoadN;
步骤六、当循环查询加载完成标识数组M_Flag中N条子线程中的每一个线程都为TRUE,数据库加载已完成,主线程结束;
当循环查询加载完成标识数组M_Flag中N条子线程中的一个线程不为TRUE;则继续查询加载完成标识数组M_Flag,直至加载完成标识数组M_Flag中N条子线程中的每一个线程都为TRUE。
发明效果
采用本发明通过引入一种基于多线程并行的SQLite数据库加载方式,有效提高数据从数据库文件到内存数组中的读取速率,改善应用程序的运行效率,并为大数据开发提供一种理想工具。对于SQLite数据库的快加载引入一种多线程并发加载的机制,由于数据库中的数据是以数据表的形式存储的,且对数据表加载是通过操作指针完成的。因此代替传统的单一数据表操作指针在主线程中从头至尾一次加载数据。我们在主线程中建立多条子线程,每一条子线程以共享模式对同一个数据库文件建立数据库操作指针,多个操作指针将数据库平均分配成若干部分。这样多条子线程并发加载,且每一个子线程仅仅加载平均分后的数据便能有效地提高数据表整体的加载速度。解决了数据库文件较大,数据量存储较多的情况下,数据加载消耗大量时间的问题。使数据加载时间减少了25%。
附图说明
图1为本发明流程图;
图2为背景技术中传统SQLite数据库加载过程;
图3是具体实施方式一中SQLite数据库快速加载主线程运行过程;
图4是具体实施方式一中SQLite数据库快速加载子线程运行过程;
图5是实施例中快速加载方式与传统加载方式性能比较;
图6是实施例中Mydatabase类的UML图,Mydatabase为自定义数据基础类,UML为标准建模语言图,PK为主键Primary key,bool M_Flag[3]为数据库加载完成标识数组,DWORD WINAPI LoadD1_1为数据库加载子线程1,DWORD WINAPI LoadD1_2为数据库加载子线程2,DWORD WINAPI LoadD1_3为数据库加载子线程3,Mydatabase()为类的构造函数,~Mydatabase()为类的析构函数,bool Load()为传统数据库加载实现函数。
具体实施方式
具体实施方式一:一种基于多线程并行的SQLite数据库快速加载方法,其特征在于:一种基于多线程并行的SQLite数据库快速加载方法具体是按照以下步骤进行的:
步骤一、在需要加载SQLite数据库的进程中,创建SQLite数据库快速载入主线程,并启动主线程进入工作状态;若主线程启动失败,则重新启动;
创建SQLite数据库快速载入主线程是在进程中调用线程创建命令实现的;SQLite是一个开源的嵌入式关系数据库;
如图3给出了SQLite数据库快速载入主线程运行过程;首先在已经进入工作状态的主线程中创建一个长度为N,数据类型为布尔类型的线程完成标识数组,并命名为M_Flag;数组M_FLAG的建立实现方式是调用数组变量声明语句实现的,声明一个长度为NUM,数据类型为布尔类型的数组变量;其中任意一个布尔类型的数据变量,只有两组取值:TRUE或FALSE,并占用1个字节的存储空间,因此工作标识数组M_FLAG的建立即是在内存中分配NUM个字节的存储空间,且这NUM个字节的存储空间中任意字节的取值只能是TRUE(对应16进制为0x01)或FALSE(对应16进制为0X00);
之后,创建N条数据加载子线程;对于N条子线程的命名依次从Load1到LoadN;具体而言是进程中调用WINDOWS操作系统中的线程建立命令语句,使得操作系统在内存中为线程运行分配足够的运行空间与维护空间;
待加载的目标数据库文件大小或者在数据文件中存储的数据表大小;获取数据表大小的实现方式是通过调用数据查询函数sqlite3_get_table,函数执行的结果返回数据表的行数与列数;在获取了数据表行、列数之后,由于存在N条线程同步加载数据库中的数据表,因此将数据表行平分N分,分配给每条线程等额的加载任务;
然后,启动所有子线程开始加载,线程的启动方式是公知方法具体而言是进程中调用WINDOWS操作系统中的线程启动命令语句,使得线程在创建阶段操作系统分配好的运行内存中开始执行工作;
最后,主线程轮询工作标识数组M_FLAG;当数组M_FLAG中所有的N个元素都为TRUE时,此时标志着N条子线程全部完成了各自的数据库加载任务,从而结束主线程;若数组M_FLAG中有一个元素不为TRUE,则继续轮询数组M_FLAG直至所有的N个元素都为TRUE,退出循环;
步骤二、主线程进入工作状态,建立N条子线程、数据类型为布尔类型的加载完成标识数组,命名为M_Flag;
建立N条子线程的加载完成标识数组M_Flag是为了在主线程中判别何时数据库文件被加载完成了;
N条子线程的工作标识数组M_Flag的实现方式就是在进程中调用变量声明语句,这样操作系统会在内存中分配与该变量数据类型相同的存储空间;
工作标识数组M_Flag的建立既是调用数组变量声明语句实现的,声明一个长度为N条子线程,数据类型为布尔类型的数组变量;
步骤三、创建N条子线程SQLite数据库快速载入子线程,子线程名称依次为Load1,Load2…LoadN;
创建SQLite数据库快速载入子线程,是在进程中调用线程创建命令实现的;
如图4,SQLite数据库快速载入子线程运行过程,首先,创建SQLite数据库操作指针,即在进程中调用指针声明语句,声明一个数据类型为Sqlite3的数据库操作指针;
确定待加载的数据库文件,运行数据库打开函数sqlite_open,打开目标数据库由于数据库打开函数sqlite_open需要两个输入参数,分别为待打开数据库文件名以及数据库操作指针,实质上数据库打开函数实现数据库操作指针与目标数据库的关联,即令第一步建立好的数据库操作指针指向目标数据库,从而实现利用该指针实现对目标数据库的进一步操作;
判断数据库是否被成功地打开了;若目标数据库文件名不存在,或数据库已被其他进程打开等意外因素数据打开失败,则执行退出;
当目标数据库打开成功,利用数据查询函数sqlite3_get_table,查询数据库中存储二维数据表大小。若该函数执行失败则退出整个加载过程;
当数据查询函数sqlite3_get_table被正确执行返回一个二维数据表的操作指针;
利用二维数据表的操作指针加载被主线程分配好的加载任务。具体实现方式是先令二维数据表的操作指针指向主线程分配好的加载部分的首位置,即指向数据表第X行第一列的元素,利用赋值语句将该元素赋值到内存当中;让后,令操作指针指向数据表第X行第二列元素,并进行相同的赋值操作。当第X行全部赋值完毕后,指针转向到第X+1行第一列元素,以此类推直至加载任务中全部元素完成赋值操作,从而实现将数据表内容加载进入内存的操作;
加载完成后,释放二维数据表占用的存储空间。具体操作是运行数据表释放函数sqlite3_free_table,释放二维数据表的操作指针,令其与二维数据表不在关联;
之后,关闭目标数据库;具体实现方式是调用数据库关闭函数sqlite3_close,取消数据库操作指针与数据库的关联性,释放其占用的存储空间;
最后,修改线程加载完成标志位数组M_Flag相应位置的元素,通知主线程该线程已经完成主线程分配好的加载任务。例如线程名为LoadX的子线程,在完成加载任务后,将M_Flag数组中的第X个元素赋值为TRUE,标识着第X条子线程已完成加载任务;
步骤四、获取需要加载SQLite数据库的数据表的大小,并将需要加载的SQLite数据库的文件包含的数据表N等分,分配给上一步已经创建好的N条子线程SQLite数据库快速载入子线程同步进行数据加载;
获取需要加载SQLite数据库的数据表的大小,利用sqlite_get_table函数查询数据库中的数据表,该函数返回数据表的行与列,从而得知数据表的大小;
步骤五、启动所有的SQLite数据库快速载入子线程从Load到LoadN;
步骤六、当循环查询加载完成标识数组M_Flag中N条子线程中的每一个线程都为TRUE,数据库加载已完成,主线程结束;
当循环查询加载完成标识数组M_Flag中N条子线程中的一个线程不为TRUE;则继续查询加载完成标识数组M_Flag,直至加载完成标识数组M_Flag中N条子线程中的每一个线程都为TRUE。
具体实施方式二:本实施方式与具体实施方式一不同的是:所述步骤四中获取需要加载SQLite数据库的文件包含的数据表的大小,并将需要加载的SQLite数据库的文件包含的数据表N等分,分配给上一步已经创建好的N条子线程SQLite数据库快速载入子线程同步进行数据加载;具体过程为:在主线程中运行sqlite3_get_table数据表查询函数,获取需要加载SQLite数据库文件包含的所存储的数据表的大小,其中数据表的总行数设为Row,总列数设为Col;此时加载数据量为Row*Col;N条子线程实现数据库同步加载,因此将数据表总行数N等分,分配给每条子线程进行加载;每条子线程加载的行数为Row/N,列数为Col的数据表,每条子线程加载数据量为Row/N*Col;由于N条子线程SQLite数据库快速载入子线程同步进行数据加载,因此实现了数据库的快速加载。
其它步骤及参数与具体实施方式一相同。
采用以下实施例验证本发明的有益效果:
实施例1:
本发明一种基于多线程并行的SQLite数据库快速加载方法,
对一个命名为WLANRadiomap140821.db3的SQLite数据库文件分别利用传统加载方式与基于多线程并发的SQLite数据库快速加载方式进行加载,并通过比较加载时间的长短来对比性能的优劣;
在Windows平台下利用Visual Studio 2008开发环境,基于面向对象的C++编程语言编写一个命名为Mydatabase的类,从而实现这种基于多线程并发的SQLite数据库快速加载方式。把这种方式封装在类中,也有效地提高了该方法使用的简便性与可搬移性;
步骤一、在需要加载SQLite数据库的进程中,创建SQLite数据库快速载入主线程,并启动主线程进入工作状态;若主线程启动失败,则重新启动;
首先在已经进入工作状态的主线程中创建一个长度为N,数据类型为布尔类型的线程完成标识数组,并命名为M_Flag;数组M_FLAG的建立实现方式是调用数组变量声明语句实现的,声明一个长度为NUM,数据类型为布尔类型的数组变量。其中任意一个布尔类型的数据变量,只有两组取值:TRUE或FALSE,并占用1个字节的存储空间,因此工作标识数组M_FLAG的建立即是在内存中分配NUM个字节的存储空间,且这NUM个字节的存储空间中任意字节的取值只能是TRUE(对应16进制为0x01)或FALSE(对应16进制为0X00);
创建N条数据加载子线程。对于N条子线程的命名依次从Load1到LoadN;其中,子线程的实现方式为公知方法,具体而言是进程中调用WINDOWS操作系统中的线程建立命令语句,使得操作系统在内存中为线程运行分配足够的运行空间与维护空间;
待加载的目标数据库文件大小或者在数据文件中存储的数据表大小;获取数据表大小的实现方式是通过调用数据查询函数sqlite3_get_table,函数执行的结果返回数据表的行数与列数;在获取了数据表行、列数之后,由于存在N条线程同步加载数据库中的数据表,因此将数据表行平分N分,分配给每条线程等额的加载任务;
然后,启动所有子线程开始加载。子线程的启动方式是公知方法具体而言是进程中调用WINDOWS操作系统中的线程启动命令语句,使得线程在创建阶段操作系统分配好的运行内存中开始执行工作;
最后,主线程轮询工作标识数组M_FLAG。当数组M_FLAG中所有的N个元素都为TRUE时,此时标志着N条子线程全部完成了各自的数据库加载任务,从而结束主线程;若数组M_FLAG中有一个元素不为TRUE,则继续轮询数组M_FLAG直至所有的N个元素都为TRUE,退出循环;
步骤二、主线程进入工作状态,建立N条子线程、数据类型为布尔类型的加载完成标识数组,命名为M_Flag;基于多线程并发的SQLite数据库快速加载方式,子线程数目设置为3;
建立N条子线程的加载完成标识数组M_Flag的目的是为了在主线程中判别何时数据库文件被加载完成了;
步骤三、创建3条子线程SQLite数据库快速载入子线程,子线程名称依次为Load1,Load2…Load3;
创建SQLite数据库快速载入子线程,是在进程中调用线程创建命令实现的;
如图4,SQLite数据库快速载入子线程运行过程,首先,创建SQLite数据库操作指针,即在进程中调用指针声明语句,声明一个数据类型为Sqlite3的数据库操作指针;
确定待加载的数据库文件,运行数据库打开函数sqlite_open,打开目标数据库由于数据库打开函数sqlite_open需要两个输入参数,分别为待打开数据库文件名以及数据库操作指针,实质上数据库打开函数实现数据库操作指针与目标数据库的关联,即令第一步建立好的数据库操作指针指向目标数据库,从而实现利用该指针实现对目标数据库的进一步操作;
判断数据库是否被成功地打开了;若目标数据库文件名不存在,或数据库已被其他进程打开等意外因素数据打开失败,则执行退出;
当目标数据库打开成功,利用数据查询函数sqlite3_get_table,查询数据库中存储二维数据表大小;若该函数执行失败则退出整个加载过程;
当数据查询函数sqlite3_get_table被正确执行返回一个二维数据表的操作指针;
利用二维数据表的操作指针加载被主线程分配好的加载任务;具体实现方式是先令二维数据表的操作指针指向主线程分配好的加载部分的首位置,即指向数据表第X行第一列的元素,利用赋值语句将该元素赋值到内存当中;让后,令操作指针指向数据表第X行第二列元素,并进行相同的赋值操作;当第X行全部赋值完毕后,指针转向到第X+1行第一列元素,以此类推直至加载任务中全部元素完成赋值操作,从而实现将数据表内容加载进入内存的操作;
加载完成后,释放二维数据表占用的存储空间;具体操作是运行数据表释放函数sqlite3_free_table,释放二维数据表的操作指针,令其与二维数据表不在关联;
之后,关闭目标数据库。具体实现方式是调用数据库关闭函数sqlite3_close,取消数据库操作指针与数据库的关联性,释放其占用的存储空间;
最后,修改线程加载完成标志位数组M_Flag相应位置的元素,通知主线程该线程已经完成主线程分配好的加载任务。例如线程名为LoadX的子线程,在完成加载任务后,将M_Flag数组中的第X个元素赋值为TRUE,标识着第X条子线程已完成加载任务;
步骤四、获取需要加载SQLite数据库的文件包含的数据表的大小,并将需要加载的SQLite数据库的文件包含的数据表N等分,分配给上一步已经创建好的N条子线程SQLite数据库快速载入子线程同步进行数据加载;
数据库文件大小为12697KB;数据表行数为6299,列数为94;
步骤五、启动所有的SQLite数据库快速载入子线程从Load到LoadN;
Load为传统加载方式实现函数名;
步骤六、当循环查询加载完成标识数组M_Flag中N条子线程中的每一个线程都为TRUE,数据库加载已完成,主线程结束;
当循环查询加载完成标识数组M_Flag中N条子线程中的一个线程不为TRUE;则继续查询加载完成标识数组M_Flag,直至加载完成标识数组M_Flag中N条子线程中的每一个线程都为TRUE。
统计了1000次利用两种不同的加载方式的数据库加载时间,图5给出了快速加载方式与传统加载方式在加载时间方面的统计结果,为文件大小12697KB的SQLite数据库加载时间,横轴为加载时间以毫秒为单位,纵轴为百分比,物理意义是这1000次数据库加载实验中,实验加载时间在一个特定数值之内的比重为多少,图5中在1400ms时比重是1的概念是1000次数据库加载实验中,有1000此实验的加载时间落在1400ms之内;
因此,可以得出基于多线程并发的SQLite数据库快速加载方式相比于传统加载方式在加载时间的性能上有明显的优势。
图6给出了整个Mydatabase类的UML图;说明子线程怎样在程序中具体实现一种基于多线程并行的SQLite数据库快速加载方法。
启动所有的SQLite数据库快速载入子线程,其中以LoadJ(J从1到N)条子线程说明子线程工作流程:创建数据类型为sqlite3的数据库操作指针,命名为dbJ;运行数据库打开函数sqlite_open,利用数据库操作指针dbJ打开待加载的数据库文件,打开失败子线程结束,此时数据库不可操作;
执行数据查询函数sqlite3_get_table,查询数据库中二维数据表大小信息,同时获取该数据表的操作指针ResultJ;加载由主线程分配的加载任务,对于第J条线程,加载数据表中行数从Row/N*(J-1)到Row/N*(J)行,总计Row/N行的数据;
完成加载后,运行数据表释放函数sqlite3_free_table,将二维数据表指针ResultJ所指向的内存释放掉;运行数据库关闭函数sqlite3_close,将数据库操作指针dbJ指向的内存释放掉;将加载完成标识数组M_Flag中的第J个元素设置为TRUE,主线程第J条子线程已完成加载任务;
创建了N条子线程SQLite数据库快速载入子线程,每条子线程加载一部分数据库文件,并且每一条子线程加载完毕自己的部分之后会将M_Flag数组中的一个元素设置为TRUE;也就是说第J条子线程完成自己的加载任务之后,将M_Flag数组中的第J个元素设置为TRUE,这样当所有的N条子线程完成加载时,M_Flag数组中全部元素都为TRUE,这样整个数据库才全部加载完,此时主线程才能结束。
Claims (2)
1.一种基于多线程并行的SQLite数据库快速加载方法,其特征在于:一种基于多线程并行的SQLite数据库快速加载方法具体是按照以下步骤进行的:
步骤一、在需要加载SQLite数据库的进程中,创建SQLite数据库快速载入主线程,并启动主线程,进入工作状态;若启动主线程失败,则重新启动;
步骤二、主线程进入工作状态,建立N条子线程的加载完成标识数组,命名为M_Flag;
步骤三、创建N条子线程SQLite数据库快速载入子线程,子线程名称依次为Load1,Load2...LoadN;
步骤四、获取需要加载SQLite数据库的数据表的大小,并将需要加载的SQLite数据库的数据表的大小N等分,分配给上一步已经创建好的N条子线程SQLite数据库快速载入子线程,同步进行数据加载;
步骤五、启动所有的SQLite数据库快速载入子线程从Load1到LoadN;
步骤六、当循环查询加载完成标识数组M_Flag中N条子线程中的每一个线程都为TRUE,数据库加载已完成,主线程结束;
当循环查询加载完成标识数组M_Flag中N条子线程中的一个线程不为TRUE;则继续查询加载完成标识数组M_Flag,直至加载完成标识数组M_Flag中N条子线程中的每一个线程都为TRUE。
2.根据权利要求1所述一种基于延时修正的多线程套接字同步通信接入方法,其特征在于:所述步骤四中获取需要加载SQLite数据库的数据表的大小,并将需要加载的SQLite数据库的数据表的大小N等分,分配给上一步已经创建好的N条子线程SQLite数据库快速载入子线程,同步进行数据加载;具体过程为:获取需要加载SQLite数据库的数据表的大小,其中数据表的总行数为Row,总列数为Col;此时加载数据量为Row*Col;N条子线程实现数据库同步加载,将数据表总行数N等分,分配给每条子线程进行加载;每条子线程加载行数为Row/N,列数为Col的数据表,每条子线程加载数据量为Row/N*Col;由于N条子线程SQLite数据库快速载入子线程,同步运行数据加载,因此实现了数据库的快速加载。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410835366.0A CN104484456A (zh) | 2014-12-29 | 2014-12-29 | 一种基于多线程并行的SQLite数据库快速加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410835366.0A CN104484456A (zh) | 2014-12-29 | 2014-12-29 | 一种基于多线程并行的SQLite数据库快速加载方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104484456A true CN104484456A (zh) | 2015-04-01 |
Family
ID=52758997
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410835366.0A Pending CN104484456A (zh) | 2014-12-29 | 2014-12-29 | 一种基于多线程并行的SQLite数据库快速加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104484456A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354320A (zh) * | 2015-11-16 | 2016-02-24 | 天津南大通用数据技术股份有限公司 | 一种快速加载多个数据文件的方法及装置 |
CN106445617A (zh) * | 2016-10-13 | 2017-02-22 | 武汉斗鱼网络科技有限公司 | 基于Android的应用程序冷启动优化方法及系统 |
CN106598748A (zh) * | 2016-12-22 | 2017-04-26 | 深圳市科脉技术股份有限公司 | 一种避免sqlite数据库并发访问时产生文件死锁的方法 |
CN106874124A (zh) * | 2017-03-30 | 2017-06-20 | 光科技股份有限公司 | 一种基于SQLite快速加载技术的面向对象用电信息采集终端 |
CN107330064A (zh) * | 2017-06-29 | 2017-11-07 | 郑州云海信息技术有限公司 | 一种基于cifs协议创建小文件的方法及系统 |
CN109408214A (zh) * | 2018-11-06 | 2019-03-01 | 北京字节跳动网络技术有限公司 | 一种数据的并行处理方法、装置、电子设备及可读介质 |
CN109634936A (zh) * | 2018-12-13 | 2019-04-16 | 山东浪潮通软信息科技有限公司 | 一种在iOS系统上处理大批量数据的存储方法 |
CN110532311A (zh) * | 2019-08-14 | 2019-12-03 | 泰安协同软件有限公司 | 一种基于队列的分布式数据导出方法及系统 |
CN111125769A (zh) * | 2019-12-27 | 2020-05-08 | 上海轻维软件有限公司 | 基于oracle数据库的海量数据脱敏方法 |
CN111679815A (zh) * | 2020-06-04 | 2020-09-18 | 广州视源电子科技股份有限公司 | 异步操作方法和装置、存储介质及相关设备 |
CN112527497A (zh) * | 2020-12-02 | 2021-03-19 | 武汉育知联信息科技有限公司 | 一种序列化多线程数据处理系统 |
CN113407328A (zh) * | 2021-07-14 | 2021-09-17 | 厦门科灿信息技术有限公司 | 多线程数据处理方法、装置、终端及采集系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6691166B1 (en) * | 1999-01-07 | 2004-02-10 | Sun Microsystems, Inc. | System and method for transferring partitioned data sets over multiple threads |
CN103049533A (zh) * | 2012-12-23 | 2013-04-17 | 北京人大金仓信息技术股份有限公司 | 一种快速向数据库加载数据的方法 |
-
2014
- 2014-12-29 CN CN201410835366.0A patent/CN104484456A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6691166B1 (en) * | 1999-01-07 | 2004-02-10 | Sun Microsystems, Inc. | System and method for transferring partitioned data sets over multiple threads |
CN103049533A (zh) * | 2012-12-23 | 2013-04-17 | 北京人大金仓信息技术股份有限公司 | 一种快速向数据库加载数据的方法 |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354320A (zh) * | 2015-11-16 | 2016-02-24 | 天津南大通用数据技术股份有限公司 | 一种快速加载多个数据文件的方法及装置 |
CN106445617A (zh) * | 2016-10-13 | 2017-02-22 | 武汉斗鱼网络科技有限公司 | 基于Android的应用程序冷启动优化方法及系统 |
CN106445617B (zh) * | 2016-10-13 | 2020-08-04 | 武汉斗鱼网络科技有限公司 | 基于Android的应用程序冷启动优化方法及系统 |
WO2018113107A1 (zh) * | 2016-12-22 | 2018-06-28 | 深圳市科脉技术股份有限公司 | 一种避免sqlite数据库并发访问时产生文件死锁的方法 |
CN106598748A (zh) * | 2016-12-22 | 2017-04-26 | 深圳市科脉技术股份有限公司 | 一种避免sqlite数据库并发访问时产生文件死锁的方法 |
CN106874124A (zh) * | 2017-03-30 | 2017-06-20 | 光科技股份有限公司 | 一种基于SQLite快速加载技术的面向对象用电信息采集终端 |
CN106874124B (zh) * | 2017-03-30 | 2023-04-14 | 光一科技股份有限公司 | 一种基于SQLite快速加载技术的面向对象用电信息采集终端 |
CN107330064A (zh) * | 2017-06-29 | 2017-11-07 | 郑州云海信息技术有限公司 | 一种基于cifs协议创建小文件的方法及系统 |
CN109408214A (zh) * | 2018-11-06 | 2019-03-01 | 北京字节跳动网络技术有限公司 | 一种数据的并行处理方法、装置、电子设备及可读介质 |
CN109634936A (zh) * | 2018-12-13 | 2019-04-16 | 山东浪潮通软信息科技有限公司 | 一种在iOS系统上处理大批量数据的存储方法 |
CN110532311B (zh) * | 2019-08-14 | 2023-11-28 | 泰安协同软件有限公司 | 一种基于队列的分布式数据导出方法及系统 |
CN110532311A (zh) * | 2019-08-14 | 2019-12-03 | 泰安协同软件有限公司 | 一种基于队列的分布式数据导出方法及系统 |
CN111125769A (zh) * | 2019-12-27 | 2020-05-08 | 上海轻维软件有限公司 | 基于oracle数据库的海量数据脱敏方法 |
CN111125769B (zh) * | 2019-12-27 | 2023-09-19 | 上海轻维软件有限公司 | 基于oracle数据库的海量数据脱敏方法 |
CN111679815A (zh) * | 2020-06-04 | 2020-09-18 | 广州视源电子科技股份有限公司 | 异步操作方法和装置、存储介质及相关设备 |
CN111679815B (zh) * | 2020-06-04 | 2024-02-09 | 广州视源电子科技股份有限公司 | 异步操作方法和装置、存储介质及相关设备 |
CN112527497A (zh) * | 2020-12-02 | 2021-03-19 | 武汉育知联信息科技有限公司 | 一种序列化多线程数据处理系统 |
CN112527497B (zh) * | 2020-12-02 | 2024-02-13 | 武汉育知联信息科技有限公司 | 一种序列化多线程数据处理系统 |
CN113407328B (zh) * | 2021-07-14 | 2023-11-07 | 厦门科灿信息技术有限公司 | 多线程数据处理方法、装置、终端及采集系统 |
CN113407328A (zh) * | 2021-07-14 | 2021-09-17 | 厦门科灿信息技术有限公司 | 多线程数据处理方法、装置、终端及采集系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104484456A (zh) | 一种基于多线程并行的SQLite数据库快速加载方法 | |
CN102902512B (zh) | 一种基于多线程编程及消息队列的多线程并行处理方法 | |
CN101699405B (zh) | 一种宿主程序和插件及插件间进行交互的方法及装置 | |
CN102955721A (zh) | 一种测试用的压力生成方法及装置 | |
CN101421711A (zh) | 用于资源受限设备的虚拟执行系统 | |
WO2019047441A1 (zh) | 一种通信优化方法及系统 | |
CN102855173B (zh) | 一种软件性能测试方法和装置 | |
CN104298512A (zh) | 一种基于OSGi标准的功能组件式集成开发系统 | |
CN102073525A (zh) | 基于Java平台的Web业务系统的动态升级方法及装置 | |
Riliskis et al. | Ravel: Programming iot applications as distributed models, views, and controllers | |
CN103995778A (zh) | 一种基于事件和动作的脚本文件生成方法及其装置 | |
CN110309123A (zh) | 数据库操作的处理方法、装置、计算机设备及存储介质 | |
Yildiz et al. | Business versus scientific workflows: A comparative study | |
CN105573774B (zh) | 应用程序参数管理及配置方法 | |
CN109683950A (zh) | 应用程序打包方法、装置、存储介质及终端 | |
CN104881461A (zh) | 一种快速数据保存方法 | |
Jin et al. | Thread Group Multithreading: Accelerating the Computation of an Agent-Based Power System Modeling and Simulation Tool--C GridLAB-D | |
CN102004662A (zh) | 嵌入式可裁剪式虚拟机 | |
CN104462605B (zh) | 一种数据库持久层框架配置、修改方法及系统 | |
CN103944778B (zh) | 一种基于组合测试集的分布式事件注入装置 | |
CN103838564A (zh) | 一种属性加载方法及系统 | |
CN102541738B (zh) | 加速多核cpu抗软错误测试的方法 | |
CN103810258A (zh) | 基于数据仓库的数据汇聚调度方法 | |
CN102402483A (zh) | 软件测试方法 | |
CN205142283U (zh) | 多平台数据共享系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150401 |
|
WD01 | Invention patent application deemed withdrawn after publication |