前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >批量数据数据库高效操作

批量数据数据库高效操作

作者头像
C语言与CPP编程
发布2020-12-02 10:11:04
4480
发布2020-12-02 10:11:04
举报
文章被收录于专栏:c语言与cpp编程

数据库优化法则归纳为5个层次:

1、 减少数据访问(减少磁盘访问)

2、 返回更少数据(减少网络传输或磁盘访问)

3、 减少交互次数(减少网络传输)

4、 减少服务器CPU开销(减少CPU及内存开销)

5、 利用更多资源(增加资源)

数据批量处理一般有两种情况(针对减少磁盘访问):

1、数据从一个数据库表A迁移到另一个数据库表B,这种情况可以每次取一定数量(例如:5条)进行批量插入。

语句如下:

在insert中写多个value

INSERT INTO table(field1,field2,field3)VALUES(‘a’,’b’,’c’),(‘a’,’b’,’c’),(‘a’,’b’,’c’),(‘a’,’b’,’c’),(‘a’,’b’,’c’);

2、数据是实时数据,比如服务器接收到的数据,数据可能在短时间有大量数据上传,也可能长时间没有,数据上传太快对与服务器的交互性能有较大的要求,如果可以批量插入,减少访问数据库,一次存入较多的数据,来提高服务器性能;

可以用vector或者其他合适的数据结构来临时存储数据,当达到预定设置的阈值时进行一次数据处理,比如vector.size>=5;

实现如下:

#include <vector>

typedef struct BIGINSERT

{

int strBooknumber;

CString strLocation;

}_biginsert_info;

typedef std::vector<_biginsert_info> Vecbigdatainsert;

_batch_info bigdatainsert;

Vecbigdatainsert vectordata;

Bigdatainsert.strBooknumber = //上传的数据

Bigdatainsert.strLocation = //上传的数据

//存入容器中

vectordata.push_back(Bigdatainsert);

int itSize = vectordata.size();

if(itSize >= 5)

{

int j = 0;

CString str1;

str1.Format("%s","('%d','%s')");

CString cstrdata[100];

CString strTemp = "";

for(Vecbigdatainsert::iterator it = vectordata.begin();it !=vectordata.end();

it++)

{

cstrdata[j].Format("('%d','%s')",it->strBooknumber,it->strLocation);

CString csData = cstrdata[j];

if(j == itSize-1)

{

strinsert+= csData;

break;

}

else

{

strinsert+= csData;

strinsert+=",";

j++;

}

}

//释放

vectordata.swap(vector<_biginsert_info>());

INSERT INTO table (field1,field2) VALUES %s",strinsert);

存在的问题是当数据上传比较缓慢的时候,没有达到阈值,数据不会处理,目前想到的解决办法是加一个线程进行定时处理,在规定的时间内,小于阈值的时候也进行处理,规定时间t是多少,根据时间数据要求的及时性设置;大家有什么好的想法进行交流,不胜感激!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言与CPP编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档