在项目中用到了基于数据库的大数据量存取时,我们要考虑的是数据读取速度,及数据存储大小,往往数据存储量大的话,数据读取速度也会随之降低,所以我们降低数据存储大小的方法,一是,使用位单位来存储数据,尽量压缩数据大小;二是,在将数据量控制在最小后,数据依旧大,那么我们需要使用压缩算法进行压缩;

在这次项目中我们使用了gzip压缩算法来压缩数据存储到redis中,然后我们使用c++开发一个数据中间件对数据进行统计分析,所以我们使用到了zlib对获取出来的大数据块进行解压缩,解压缩代码如下:

bool Uncompress(unsigned char * src, size_t src_size, unsigned char *dest, size_t &dest_size)
{int bufSize = 1024;Byte *buf = static_cast<Byte *>(malloc(bufSize * sizeof(Byte)));int err = 0;z_stream d_stream = { 0 };d_stream.zalloc = NULL;d_stream.zfree = NULL;d_stream.opaque = NULL;d_stream.next_in = src;d_stream.avail_in = 0;d_stream.next_out = buf;if (inflateInit2(&d_stream, MAX_WBITS + 16) != Z_OK){_mLastErrorString = "Uncompress gzip: inflateInit2 error";return false;}uLong totalOut = 0;while (d_stream.total_in < src_size && d_stream.total_out < dest_size){      memset(buf, 0, bufSize);d_stream.next_out = buf;d_stream.avail_in = d_stream.avail_out = bufSize;err = inflate(&d_stream, Z_NO_FLUSH);if (err >= 0){    memcpy(dest + totalOut, buf, d_stream.total_out - totalOut);totalOut = d_stream.total_out;if (err == Z_STREAM_END){break;}}else{break;}}d_stream.next_out = NULL;delete buf;buf = NULL;if (inflateEnd(&d_stream) != Z_OK){_mLastErrorString = "Uncompress gzip: inflateEnd error";return false;}return true;
}

调用方法如下:

//------------------------------解压缩
unsigned char* valBuff = (unsigned char*)valStr.c_str();
size_t unSize = gridInfo.rows * gridInfo.cols * sizeof(short);
unsigned char *unValBuff = (unsigned char*)malloc(unSize);
bool re = Uncompress(valBuff, valStr.size() * sizeof(unsigned char), unValBuff, unSize);
if (!re)
{return false;
}//-----------------------------解析数据
//TODO
free(unValBuff);

c++大数据量压缩方法——基于zlib的gzip解压缩方法相关推荐

  1. 如何 提高企业网站大数据量 效率

    摘  要:目前企业信息化正在如火如荼地开展之中,企业信息量在急剧膨胀.这使得信息的搜索工作变得极为繁重起来.据调查统计,人们在平时的工作中,有70%的时间都花费在信息搜索上.由此,如何提高人们搜索信息 ...

  2. snm算法_基于SNM算法的大数据量中文商品清洗方法

    基于 SNM 算法的大数据量中文商品清洗方法 ∗ 张苗苗 苏 勇 [摘 要] 摘 要 SNM 算法即邻近排序算法,是英文数据清洗最常用的算法[ 1 ] . 目前为止,因为中英文语义的差异等一些原因,中 ...

  3. snm算法_基于SNM算法的大数据量中文地址清洗方法-计算机工程与应用.PDF

    基于SNM算法的大数据量中文地址清洗方法-计算机工程与应用 108 2014 ,50(5 ) Computer Engineering and Applications 计算机工程与应用 基于SNM ...

  4. 3DGIS第二章 大数据量场景加速绘制基本原理与方法

    对于仅有几百个多边形和几十兆的低分辨率纹理简单场景,在现阶段一般配置的计算机上也很容易达到实时仿真的目标.然而,随着场景规模的增大,大规模虚拟场景中往往包含上万个多边形,甚至多达几百万个多边形和几百兆 ...

  5. 大数据量场景加速绘制基本原理与方法

    对于仅有几百个多边形和几十兆的低分辨率纹理简单场景,在现阶段一般配置的计算机上也很容易达到实时仿真的目标.然而,随着场景规模的增大,大规模虚拟场景中往往包含上万个多边形,甚至多达几百万个多边形和几百兆 ...

  6. 第二章 大数据量场景加速绘制基本原理与方法

    对于仅有几百个多边形和几十兆的低分辨率纹理简单场景,在现阶段一般配置的计算机上也很容易达到实时仿真的目标.然而,随着场景规模的增大,大规模虚拟场景中往往包含上万个多边形,甚至多达几百万个多边形和几百兆 ...

  7. 大数据量,海量数据 处理方法总结(转)

    最近有点忙,稍微空闲下来,发篇总结贴. 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到. 下面的方法是我对海量数据的处理方法 ...

  8. MySQL大数据量分页查询方法及其优化

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 链接:ht ...

  9. 大数据量高并发访问的数据库优化方法

    一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. ...

最新文章

  1. 日期与unix时间戳之间的转换C++实现
  2. c语言如何快速看懂别人的程序,探究如何快速看懂单片机程序方法
  3. nodejs实现的简单接口
  4. js模块化:require、import和export
  5. linux 查看其他磁盘分区,Linux 查看磁盘分区.pdf
  6. ZEN CART 在LINUX系统下设置邮箱方法---用GMAIL设置,方法选择SMTPAUTH
  7. ctype函数_PHP ctype_xdigit()函数与示例
  8. jqueryui时间插件_jQueryUI Progressbar插件
  9. 开课吧Java课堂:什么是ArrayList类
  10. 多WEB服务器共享SESSION方案
  11. CMU 15-213 Introduction to Computer Systems学习笔记(5) Machine-Level Programming-Control
  12. 原生JavaScript实现幻灯片效果
  13. 计算机操作系统|汤小丹|第四版|习题答案(一)
  14. pdf照片显示正常打印时被翻转_2020年广东二级建造师准考证打印常见问题
  15. 我的 OCM 之路|书写无悔青春,追梦永不止步
  16. 预后建模绕不开的lasso cox回归
  17. Cobaltstrike系列教程(十一)提权与横向移动
  18. 软件测试的工作流程是什么?
  19. [从零学习汇编语言] - BX寄存器与loop指令
  20. python重构_重构Python应用程序以简化操作

热门文章

  1. 常用60类图表使用场景、制作工具推荐
  2. 【Axure高保真原型】柱状-折线组合图表原型模板
  3. 我的作品之《Unity虚拟现实开发实战》,翻译自《Unity Virtual Reality Projects》
  4. fix8源码分析之日志模块
  5. 给UMEditor 增加placeholder
  6. 办理ISO13485医疗器械质量管理体系认证认证的条件。
  7. java mahout使用教程_Mahout使用简例
  8. 迈拓网络硬盘软件全攻略(1)基本介绍
  9. stp rstp pvst mstp
  10. 用C语言for循环输出三角形