批量数据数据库操作

举报
C语言与CPP编程 发表于 2021/06/04 00:12:00 2021/06/04
【摘要】 数据库优化法则归纳为5个层次: 1、 减少数据访问(减少磁盘访问) 2、 返回更少数据(减少网络传输或磁盘访问) 3、 减少交互次数(减少网络传输) 4、 减少服务器CPU开销(减少CPU及内存开销) 5、 利用更多资源(增加资源) 数据批量处理一般有两种情况(针对减少磁盘访问): 1、数据从一个数据库表A迁移到另一个数据库表B,这种情况可以每次取一定数量(例如:5...

数据库优化法则归纳为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

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++)

  
 
  • 1

{

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

 if(j == itSize-1)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

{

   strinsert+= csData; break; }

 else { strinsert+=  csData; strinsert+=","; j++; }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

}

//释放

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

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

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

文章来源: blog.csdn.net,作者:C语言与CPP编程,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/104582109

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。