当前位置: 首页 > news >正文

测试比json更快更小的二进制数据传输格式Msgpack [pythono MessagePack 版本]

MessagePack简称msgpack,官方网站是http://msgpack.org/ ,代码可以在github上查看 https://github.com/msgpack。


官方介绍是“Extremely efficient object serialization library for cross-language communication.It's like JSON, but very fast and small.”,是一种跨语言的基于二进制的数据格式。


msgpack完全兼容json的数据格式

比json的序列化更省时间和空间

支持很多种语言(python,java,ruby,c,golang。。。。)


从官方的介绍来看,它能够比

google protocol buffers快4倍,比json快10倍多。


好多项目都开始用他,咱们ops界流行的saltstack mq的传输也是用msgpack来搞的~




181000830.png

最近看到golang群里的兄弟们说,msgpack要比json更好更快。。。 这东西我以前用过,但是因为给别人提供http接口的话,用js不好解析。 所以。。。。 我也就放弃使用了。

我的测试服务器:

PowerEdge R720 16G Xeon E5-2603 1.8GHz

081438331.jpg


我的测试代码:


174207800.png


大量数据下的压力测试的结果~

175021315.png


我把结果重定向到一个文件里面 !!!

看到了吧,是14MB左右 ~

175104238.png

我们打开看看 ~

175207796.png

都是二进制的文件 ~


下面我们再解析json的数据 ~

175540959.png


测试的结果是:

json生成的数据要比msgpack大的多,大整整一倍左右,但是至于时间,真心没看到啥优势。

175918413.png


#让我们来测试json吧~   呼呼
import msgpack
import json
import time
import random
import string
import os
ISOTIMEFORMAT='%Y-%m-%d %X'
print time.strftime(ISOTIMEFORMAT, time.localtime())
data={}
for i in range(1000000):
    salt = ''.join(random.sample(string.ascii_letters + string.digits, 8))
    data[i]=salt
d=json.dumps(data)
d1=json.loads(d)
d2=json.dumps(d)
fileHandle = open( 'timejson.txt', 'w' )
fileHandle.write(d2)
fileHandle.close()
print time.strftime(ISOTIMEFORMAT, time.localtime())


这是一个老外的平均测试下的结果~

181324930.png

源地址http://rfyiamcool.blog.51cto.com/1030776/1303868


官网是用c,java做的测试,他们是编译语言,肯定要比python这类的测试压力更大更精准。 虽然没有强十倍,哪怕一倍的结果,但是好在他的数据量是可以缩小的。

在cs 模式下,用这个来解决文件大小的传输算是不错的方案。


相关文章:

  • 01_excel基础知识1
  • 学习Trie树,处理“海量”数据
  • hibernate的native sql查询
  • 类的成员变量和属性Fields and Properties in class
  • 一个简单的JavaScript Map
  • Introduction to the Java Persistence API
  • 电脑开机后总是提示对话框:服务器正在运行中
  • hibernate第一天:环境搭建
  • 创建自己的yum源
  • hibernate第二天:hibernate原理
  • LINUX系统监控
  • hibernate第三天:O/R MAPPING常见框架
  • hadoop on nitrous.io
  • java常见日志理解
  • cobbler使用入门(未完整,待修改)
  • 3.7、@ResponseBody 和 @RestController
  • JDK9: 集成 Jshell 和 Maven 项目.
  • linux安装openssl、swoole等扩展的具体步骤
  • mysql 5.6 原生Online DDL解析
  • PAT A1050
  • React16时代,该用什么姿势写 React ?
  • SpingCloudBus整合RabbitMQ
  • yii2权限控制rbac之rule详细讲解
  • 安装python包到指定虚拟环境
  • 搭建gitbook 和 访问权限认证
  • 服务器从安装到部署全过程(二)
  • - 概述 - 《设计模式(极简c++版)》
  • 给第三方使用接口的 URL 签名实现
  • 区块链共识机制优缺点对比都是什么
  • 如何进阶一名有竞争力的程序员?
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 网络应用优化——时延与带宽
  • 我感觉这是史上最牛的防sql注入方法类
  • 小程序测试方案初探
  • 正则表达式
  • 字符串匹配基础上
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (poj1.2.1)1970(筛选法模拟)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (分类)KNN算法- 参数调优
  • (全注解开发)学习Spring-MVC的第三天
  • (四) Graphivz 颜色选择
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)汇编语言——简单程序
  • (转)EOS中账户、钱包和密钥的关系
  • (转)菜鸟学数据库(三)——存储过程
  • (转)用.Net的File控件上传文件的解决方案
  • . NET自动找可写目录
  • .apk 成为历史!