您的位置:首页 > 编程语言 > C语言/C++

C++: Sqlite3几种数据插入方式比较

2013-10-28 12:59 351 查看
在sqlite3中,数据的更新模式默认为PRAGMA synchronous = FULL; 这个参数影响了更新数据的速度。

下面的测试代码表明,OFF状态比Full状态的更新速度快50倍左右

1. 示例代码

#include "sqlite3.h"
#include <stdio.h>
#include <time.h>
#include <string.h>

static char s_szDBFile[] = "d:\\test.db";

//耗时计算
class CElapseTime
{
public:
CElapseTime(char *sPrompt)
{
memset(m_sPrompt, 0, sizeof(m_sPrompt));
strcpy(m_sPrompt, sPrompt);
m_Start = clock();
}

~CElapseTime()
{
printf("[%s]耗时: %f\n", m_sPrompt, (clock() - m_Start)*1.0f/CLK_TCK);
}

private:
char m_sPrompt[255];
clock_t m_Start;
};

void TestInsert_SYN(int n, char *sSync, char *szSql)
{
char sPrompt[255];
sprintf(sPrompt, "%s 状态, %d条记录", sSync, n);
CElapseTime aET(sPrompt);
char *errMsg;
sqlite3 *pDB;
sqlite3_open(s_szDBFile, &pDB);
sprintf(sPrompt,"PRAGMA synchronous = %s;", sSync);
sqlite3_exec(pDB, sPrompt, 0,0,0);
for(int i=0; i<n; i++)
{
sqlite3_exec(pDB, szSql, 0, 0, &errMsg);
}
sqlite3_close(pDB);
}

void TestInsert_Full_Trans(int n, char *szSql)
{
char sPrompt[255];
sprintf(sPrompt, "FULL状态事务版, %d条记录", n);
CElapseTime aET(sPrompt);
char *errMsg;
sqlite3 *pDB;
sqlite3_open(s_szDBFile, &pDB);
sqlite3_exec(pDB, "Begin transaction; ", 0,0,0);
for(int i=0; i<n; i++)
{
sqlite3_exec(pDB, szSql, 0, 0, &errMsg);
}
sqlite3_exec(pDB,"commit transaction;",0,0, &errMsg);
sqlite3_close(pDB);
}

void CreateDB()
{
sqlite3 *pDB;
sqlite3_open(s_szDBFile, &pDB);
sqlite3_exec(pDB, "Create Table tblTest(a Text, b Text)", 0, 0, NULL);
sqlite3_close(pDB);
}

void main()
{
int n = 5;
char szInsertSQL[] = "Insert into tblTest(A,B) values(\"中华人民共和国中华人民共和国中华人民共和国\",\"中华人民共2和国中华人民共和国2中华人民共和国2\");";
CreateDB();
TestInsert_SYN(n, "FULL", szInsertSQL);
TestInsert_SYN(n, "NORMAL", szInsertSQL);
n *= 100;
TestInsert_SYN(n, "OFF", szInsertSQL);
TestInsert_Full_Trans(n, szInsertSQL);
remove(s_szDBFile);
}


2. 测试结果

机器配置xp sp3, i7-2640M, 内存3.48GB

[FULL 状态, 5条记录]耗时: 0.359000
[NORMAL 状态, 5条记录]耗时: 0.297000
[OFF 状态, 500条记录]耗时: 0.797000
[FULL状态事务版, 500条记录]耗时: 0.250000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ sqlite3