热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:MsgPack/Json性能数据

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MsgPack/Json性能数据相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MsgPack/Json性能数据相关的知识,希望对你有一定的参考价值。








文章目录


      • MsgPack/Json性能数据对比





MsgPack/Json性能数据对比

MsgPack是一个高效的二进制序列化格式,像Json一样可以在各语言之间进行交换数据,都用来序列化存储数据。优势是在数据规模大时,效率比Json更高,占用资源更少;缺点是,二进制格式,不易查看数据。

业界Rpc交互之间使用广泛:JD,Baidu…
官网地址:http://pecl.php.net/package/msgpack

下面做了样本实验,简单对比MsgPack于Json性能:

实验数据「样本数据选取string类型,观察对比耗时、占比情况」:
在这里插入图片描述

此样本库可得出:
String/Int混合类型中,MsgPack在序列化String时比Json压缩/耗时性能更优秀;Int类型时压缩比仅差1个百分点,耗时优势依旧突出。在数据对象中String类型占比大的场景,MsgPack比Json更适合。

:样本一数据中Msg/Json耗时占比逼近3个百分点;Msg/Json压缩占比平均在86%,短的字符串仅仅只需要比它的长度多3-4个字节的大小;

附样本数据:

//"github.com/vmihailenco/msgpack"
//msgpack于json对比 code
var rangeObj []string
var testSliceStr string
testStr :="{\\"from_trans\\":1,\\"uid_real_tags\\":\\"\\",\\"aid\\":\\"\\",\\"uid\\":\\"5537471228\\",\\"idfa\\":\\"\\",\\"pst_basic_profile\\":200,\\"positions\\":\\"3|8|13|18|23\\",\\"service\\":\\"discover_hotspot_feed\\",\\"oaid\\":\\"\\",\\"user_ip\\":\\"172.17.0.1\\",\\"mid_s_reason\\":\\"\\",\\"server_addr\\":\\"10.13.40.145\\",\\"experiment\\":{},\\"ts\\":1617690796,\\"blog_author_id\\":\\"\\",\\"loadmore\\":\\"0\\",\\"id\\":\\"16176907970138000027\\",\\"rc\\":200,\\"uve\\":{\\"ui_hc\\":200,\\"u_hc\\":200,\\"ui_rc\\":200,\\"u_rc\\":0,\\"passport\\":\\";;200|1.9888877868652\\"},\\"ua\\":\\"1\\",\\"engine_time\\":107,\\"render\\":{\\"resources\\":[{\\"ur_hc\\":200,\\"position\\":3,\\"ur_rc\\":0,\\"like\\":\\"404|0;404:1\\",\\"mblog\\":\\"404|0;200|3;\\",\\"time\\":42},{\\"ur_hc\\":200,\\"position\\":8,\\"ur_rc\\":0,\\"like\\":\\"404|0;404:2\\",\\"mblog\\":\\"404|0;200|13;\\",\\"time\\":34}]},\\"stocks\\":{\\"mixrank_ads\\":\\"18|23\\",\\"u_positions\\":\\"3|8|13\\",\\"std_positions\\":\\"3|8|13|18|23\\",\\"last_span\\":\\"-1\\",\\"interval\\":\\"5\\"},\\"owner_uid\\":\\"\\",\\"from\\":\\"1093193010\\",\\"version\\":5,\\"idx_id\\":\\"16176907970138000027\\",\\"bc_tags\\":{\\"l2_tags\\":\\";\\",\\"keywords\\":\\"\\",\\"l1_tags\\":\\"\\"},\\"mixrank\\":1,\\"mid\\":\\"\\",\\"filtered_imps\\":\\"\\",\\"head_time\\":9,\\"webview_ua\\":\\"0\\",\\"follows\\":77,\\"sub_service_id\\":\\"\\",\\"products\\":[{\\"positions\\":[3,8,13,18,23],\\"time\\":104,\\"rc\\":200,\\"product\\":\\"Sfst\\",\\"cands\\":[{\\"price\\":[160,149,149,0],\\"position\\":3,\\"status\\":2000,\\"ustatus\\":12106,\\"factors\\":[\\"3003\\",\\"3068807231\\",\\"\\",\\"1\\",\\"783_006\\"],\\"ur_hc\\":500,\\"bid\\":\\"160|1|1|1|160|0|0.00031228387|agent|4000\\",\\"ad_mid\\":\\"4610321166109510\\",\\"rstatus\\":22106,\\"feature\\":\\"88030004\\",\\"result\\":\\"4610321166109510\\"},{\\"status\\":2030,\\"price\\":[160,0,0,0],\\"position\\":8,\\"factors\\":[\\"3003\\",\\"3068807231\\",\\"\\",\\"1\\",\\"783_006\\"],\\"result\\":\\"4610321166109510\\",\\"ad_mid\\":\\"4610321166109510\\",\\"bid\\":\\"160|1|1|1|160|0|0.00031228387|agent|4000\\",\\"feature\\":\\"88030004\\"},{\\"price\\":[1,1,1,0],\\"position\\":8,\\"status\\":2000,\\"ustatus\\":12106,\\"factors\\":[\\"3001\\",\\"5931191764\\",\\"\\",\\"1\\",\\"783_006\\"],\\"ur_hc\\":500,\\"bid\\":\\"1|1|1|1|1|0|0.00030010002|agent|4000\\",\\"ad_mid\\":\\"4620027461112281\\",\\"rstatus\\":22106,\\"feature\\":\\"88030003\\",\\"result\\":\\"4620027461112281\\"},{\\"status\\":2030,\\"price\\":[160,0,0,0],\\"position\\":13,\\"factors\\":[\\"3003\\",\\"3068807231\\",\\"\\",\\"1\\",\\"783_006\\"],\\"result\\":\\"4610321166109510\\",\\"ad_mid\\":\\"4610321166109510\\",\\"bid\\":\\"160|1|1|1|160|0|0.00031228387|agent|4000\\",\\"feature\\":\\"88030004\\"},{\\"status\\":2030,\\"price\\":[1,0,0,0],\\"position\\":13,\\"factors\\":[\\"3001\\",\\"5931191764\\",\\"\\",\\"1\\",\\"783_006\\"],\\"result\\":\\"4620027461112281\\",\\"ad_mid\\":\\"4620027461112281\\",\\"bid\\":\\"1|1|1|1|1|0|0.00030010002|agent|4000\\",\\"feature\\":\\"88030003\\"},{\\"status\\":2030,\\"price\\":[160,0,0,0],\\"position\\":18,\\"factors\\":[\\"3003\\",\\"3068807231\\",\\"\\",\\"1\\",\\"783_006\\"],\\"result\\":\\"4610321166109510\\",\\"ad_mid\\":\\"4610321166109510\\",\\"bid\\":\\"160|1|1|1|160|0|0.00031228387|agent|4000\\",\\"feature\\":\\"88030004\\"},{\\"status\\":2030,\\"price\\":[1,0,0,0],\\"position\\":18,\\"factors\\":[\\"3001\\",\\"5931191764\\",\\"\\",\\"1\\",\\"783_006\\"],\\"result\\":\\"4620027461112281\\",\\"ad_mid\\":\\"4620027461112281\\",\\"bid\\":\\"1|1|1|1|1|0|0.00030010002|agent|4000\\",\\"feature\\":\\"88030003\\"},{\\"status\\":2030,\\"price\\":[160,0,0,0],\\"position\\":23,\\"factors\\":[\\"3003\\",\\"3068807231\\",\\"\\",\\"1\\",\\"783_006\\"],\\"result\\":\\"4610321166109510\\",\\"ad_mid\\":\\"4610321166109510\\",\\"bid\\":\\"160|1|1|1|160|0|0.00031228387|agent|4000\\",\\"feature\\":\\"88030004\\"},{\\"status\\":2030,\\"price\\":[1,0,0,0],\\"position\\":23,\\"factors\\":[\\"3001\\",\\"5931191764\\",\\"\\",\\"1\\",\\"783_006\\"],\\"result\\":\\"4620027461112281\\",\\"ad_mid\\":\\"4620027461112281\\",\\"bid\\":\\"1|1|1|1|1|0|0.00030010002|agent|4000\\",\\"feature\\":\\"88030003\\"}]},{\\"rc\\":200,\\"time\\":7,\\"positions\\":[3,8,13,18,23],\\"product\\":\\"WAX\\"}],\\"mac\\":\\"\\",\\"user_info\\":[],\\"imei\\":\\"da472ec3b036b57b98e71a1d9f970723\\",\\"unread_status\\":\\"15\\",\\"stock\\":{\\"783_006\\":[3,8,13,18,23],\\"30_003\\":[3,8,13,18,23]},\\"darwin_code\\":\\"200\\",\\"idx_time\\":125}"
for i :&#61; 0;i<10000;i&#43;&#43;{
testSliceStr &#61; testSliceStr &#43; testStr
if i%1000 &#61;&#61; 0{
rangeObj &#61; append(rangeObj,testSliceStr)
}
}
for i,v:&#61; range rangeObj {
testSliceStr &#61; v
//1、数据大小对比
timeStart :&#61; time.Now()
msgSizeRes, _ :&#61; msgpack.Marshal(testSliceStr)
timeEnd :&#61; time.Now()
duration1 :&#61; timeEnd.Sub(timeStart)
fmt.Println("msg 序列化用时&#xff1a;", duration1)
timeStart &#61; time.Now()
jsonSizeRes, _ :&#61; json.Marshal(testSliceStr)
timeEnd &#61; time.Now()
duration2 :&#61; timeEnd.Sub(timeStart)
fmt.Println("json 序列化用时&#xff1a;", duration2)
fmt.Println("content 序列化前大小&#xff1a;", len([]byte(testSliceStr)))
fmt.Println("msg 序列化后大小&#xff1a;", len(msgSizeRes))
fmt.Println("json 序列化后大小&#xff1a;", len(jsonSizeRes))
fmt.Println("msg:json 用时比&#xff1a;", float32(duration1.Microseconds())/float32(duration2.Microseconds()))
fmt.Println("msg:json 压缩比&#xff1a;", float32(len(msgSizeRes))/float32(len(jsonSizeRes)))
fmt.Printf("QQQQQQ&#61;&#61;&#61;test:%&#43;v\\n", i)
}

Res如下&#xff1a;



msg 序列化用时&#xff1a; 360.833μs
json 序列化用时&#xff1a; 369.75μs
content 序列化前大小&#xff1a; 3442
msg序列化后大小&#xff1a; 3445
json 序列化后大小&#xff1a; 4002
msg:json 用时比&#xff1a; 0.9756098
msg:json 压缩比&#xff1a;0.8608196
QQQQQQ&#61;&#61;&#61;test:0


msg 序列化用时&#xff1a; 5.112875ms
json 序列化用时&#xff1a; 25.18375ms
content 序列化前大小&#xff1a; 3445442
msg 序列化后大小&#xff1a; 3445447
json 序列化后大小&#xff1a; 4004002
msg:json 用时比&#xff1a; 0.20299408
msg:json 压缩比&#xff1a; 0.8605008
QQQQQQ&#61;&#61;&#61;test:1


msg 序列化用时&#xff1a; 13.055833ms
json 序列化用时&#xff1a; 26.396916ms
content 序列化前大小&#xff1a; 6887442
msg 序列化后大小&#xff1a; 6887447
json 序列化后大小&#xff1a; 8004002
msg:json 用时比&#xff1a; 0.4945825
msg:json 压缩比&#xff1a; 0.8605004
QQQQQQ&#61;&#61;&#61;test:2


msg 序列化用时&#xff1a; 13.461958ms
json 序列化用时&#xff1a; 39.432458ms
content 序列化前大小&#xff1a;10329442
msg 序列化后大小&#xff1a; 10329447
json 序列化后大小&#xff1a; 12004002
msg:json 用时比&#xff1a;0.3413725
msg:json 压缩比&#xff1a; 0.8605003
QQQQQQ&#61;&#61;&#61;test:3








推荐阅读
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
author-avatar
韩志勇1234
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有