注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

勇敢的劳尤条

 
 
 

日志

 
 

mysql++ 数据插入测试  

2013-10-15 16:59:42|  分类: mysql相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在ubuntu下,用CodeBloks做的简单测试。C::B编译方法如下链接。
1)用sql_create_2()创建数据库结构,自动生成构造函数
2)产生AAAA-ZZZZ一共456976条用户信息(45.6w)
3)用insert和insertfrom分别测试所需时间

#include <mysql++.h>
#include <ssqls.h>
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
using namespace mysqlpp;
sql_create_2(userItem,1,2,
           sql_char, userName,
           sql_char, userPsw)
//#define TEST1//用于删除数据表的宏,若定义宏,删除数据表,若没有,插入数据
int main(int argc, char*argv[])
{
    const char* db = "test", *server = "localhost", *user = "root", *pass = "ipcamera";
Connection conn(false);
conn.set_option(new MultiStatementsOption(true));
conn.set_option(new SetCharsetNameOption("gbk"));
if (conn.connect(db, server, user, pass))
{
Query query = conn.query();
#ifdef TEST1
query<<"DROP TABLE IF EXISTS userItem;\n"<<
"create table userItem\
(userName varchar(15) not null,\
 userPsw varchar(15) not null);";
if(query.exec())
{
cout<<"success"<<endl;
}
else
{
cerr<<"fail:"<<query.error()<<endl;
}
#else
vector<userItem> uvec;
        sql_char str(4,0);
        for(int i1=0;i1<26;++i1)
        {
            for(int i2=0;i2<26;++i2)
            {
                for(int i3=0;i3<26;++i3)
                {
                    for(int i4=0;i4<26;++i4)
                    {
                        str[0]='A'+i1;
                        str[1]='A'+i2;
                        str[2]='A'+i3;
                        str[3]='A'+i4;
                        //userItem uItem("fuck","fuck");
                        userItem uItem(str,str);
                        uvec.push_back(uItem);
                    }
                }
            }
        }
        cout<<"size"<<uvec.size()<<endl;
Query::MaxPacketInsertPolicy<> insert_policy(3000);
clock_t clockBegin, clockEnd;
clockBegin=clock();
query.insertfrom(uvec.begin(),uvec.end(),insert_policy);
        /*if(query.insert(uvec.begin(),uvec.end()).exec())
        {
cout<<"success"<<endl;
}
else
{
cerr<<"fail:"<<query.error()<<endl;
}*/
        clockEnd=clock();
        cout<<"time = "<<(clockEnd-clockBegin);
        #endif

}
else
{
cerr << "DB connection failed: " << conn.error() << endl;
return 1;
}
    return 0;
}

最后经过测试,insert所需时间710ms,insertfrom时间不定,取决于insert_policy(分块插入),分的多,插入时间就长,但是相对安全一些。大块数据插入,容易出错。
  评论这张
 
阅读(72)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017