关于MessagePack的一些记录

昨天记录了ProtoBuf的一些记录,然后因为项目中用的是MessagePack,就大概了解了一下MessagePack的一些原理,然后做下简单记录。

MessagePack从数据上来看整体是不错的,空间也有较大节省,序列化和反序列化的速度都非常优秀(各家说各家的好,不知道怎么统计的)

对于MessagePack来说,它也是按照类型进行压缩,利用少量的类型信息,来优化Value部分的存储消耗。

比如我们分析了ProtoBuf采用的是Variant Number这种变长整形的压缩。MessagePack做的更直接,直接看你Value的值用几位可以表示,8位,16位,还是32位,那我就标记3种不同的类型信息,然后吧Value按照对应的字节直接写入后边。这样也起到了压缩的作用。和ProtoBuf比,可能会有一定的浪费,但对于小数字来说相对还好。因为ProtoBuf有MSB的概念,特别对于比较大的数,至少要浪费2-3位的MSB,如果这2-3位被MsgPack用来做type信息,实际上二者在空间上是差不多的。

但实际上,MsgPack应该还是节省了一些。因为ProtoBuf记录了FiledNum,也就是字段的信息,而MsgPack可以忽略这个信息,强制按照顺序去对字段进行序列化。这样的好处是节省内存空间,缺点是,比较难去做字段扩展,一旦字段顺序改变,或者增删,基本上很难和过去的数据结构进行兼容。但ProtoBuf因为有字段的信息,所以有的就序列化,没有的就用默认值。

只能说MsgPack对于各种正负数,小数的处理,都按照类型这种模式以后确实简化优雅了不少。

具体的效率,结合Runtime,可以做到更优,结合具体的预研,也可以优化。比如C#的GC。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我去,PMP原来不是所有人都能报!

很多人可能觉得PMP的报名条件很复杂,又是经验要求,又是学历要求的,网络上关于PMP报名条件说的层出不穷,今天给大家统一一下,报名PMP究竟需要什么条件: 官方报考条件: 一、报名考生必须具备35小…

pht春2

pht春2 A 如果一个点把自己给叶子则同构 每个点进行操作后就会变成叶子 只要一个非叶给非叶就一定不同构,因为肯定会多一个叶子 所以可以大胆猜测操作次数就是非叶子节点个数 -1 听说他们打完结论假了。 好吧,他们是 n 2 n2 n2 没有特判。 B 先…

大语言模型 vs 大模型

前言 有时候我们经常说行业大模型,医疗大模型,开源大模型,甚至用「产品大模型」的固定结构去称呼一个模型,例如百度的文心一言大模型,但是文心一言其实是大语言模型,大模型和大语言模型,差别就…

Cannot find runner for app ——Android Studio

问题 在修改build.gradle(:app)文件或者其他操作后,出现了无法运行的问题: Cannot find runner for app 如图运行按钮不可点击。 解决方案 点击【File】下的【Sync Project with Gradle Files】同步完成后,一般就可运行了。

动态输出n位小数——满满都是坑!

【题目描述】 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b ≤10^6 ,c≤100。输入包含多组数据,结束标记为a=b=c=0。 【样例输入】 1 6 4 0 0 0 【样…

填字母游戏【蓝桥杯】/博弈+dfs

填字母游戏 博弈dfs #include<iostream> #include<map> using namespace std; //要用map存储已经处理过的字符串不然会超时 map<string,int> m; //dfs返回的就是结果 int dfs(string s) {//剪枝if(m.find(s)!m.end()) return m[s];//找到LOL代表输了if(s.fi…

显示学习1(基于树莓派Pico) -- 基础

先上图为敬。 驱动的是0.96寸的OLED&#xff0c;SSD1315。使用的I2C接口驱动。 有一说一树莓派Pico用来学习底层真的太好了&#xff0c;没有之一。首先是价格便宜&#xff0c;10块钱包邮还要什么自行车。然后底层封装很完备&#xff0c;接近闭源。最后是用的python&#xff0c…

使用nodejs搭建脚手架工具并发布到npm中

使用nodejs搭建脚手架工具并发布到npm中 一、安装环境依赖及脚手架搭建过程二、搭建Monorepo 风格的脚手架工程三、脚手架的必备模块命令参数模块获取命令参数设置子命令用户交互模块文件拷贝模块脚手架中的路径处理目录守卫文件拷贝模块动态文件生成模块mustache简介自动安装依…

思迈特软件与上海德拓签署战略合作协议,携手赋能企业数字化转型

3月27日&#xff0c;广州思迈特软件有限公司&#xff08;简称“思迈特软件”&#xff09;与上海德拓信息技术有限公司&#xff08;简称“德拓信息”&#xff09;正式签约建立战略合作伙伴关系。双方将在数字化转型、数据服务、数据应用以及市场资源等多个领域展开深度合作&…

基于机器学习的信用卡办卡意愿模型预测项目

基于机器学习的信用卡办卡意愿模型预测项目 在金融领域&#xff0c;了解客户的信用卡办卡意愿对于银行和金融机构至关重要。借助机器学习技术&#xff0c;我们可以根据客户的历史数据和行为模式预测其是否有办理信用卡的倾向。本项目通过Python中的机器学习库&#xff0c;构建…

高频SQL 有趣的电影

题目信息 表&#xff1a;cinema -------------------------- | Column Name | Type | -------------------------- | id | int | | movie | varchar | | description | varchar | | rating | float | --------------------…

CSS变换

CSS变换 根据 CSS 的变换的功能特性&#xff0c;它可以分为位移、旋转、缩放、倾斜和透视&#xff1a; 也可以分成2D变换和3D变换&#xff0c;2D变换是二维平面上进行的&#xff0c;即 X 轴和 Y 轴。这些变换不涉及 Z 轴。3D 变换允许元素在三维空间中进行操作&#xff0c;这些…

Spring WebFlux响应式实现WebFilter解决跨域问题

WebFilter 是 Spring Framework 中用于处理 Web 请求的过滤器接口&#xff0c;它是在基于 Servlet 3.0 规范的基础上&#xff0c;为了支持响应式编程模型而引入的。与传统的 Servlet 过滤器相似&#xff0c;WebFilter 也允许开发者对进入的请求和返回的响应进行拦截、修改或者增…

SQL SERVER 备份

目录 1.备份概念 1.1 为何备份? 1.2 SQL Server 备份模式 2.SQL Server 数据库备份 2.1 借助SSMS备份数据库 2.2 借助 T-SQL 备份数据库 2.3 创建加密备份 2.4 备份文件和文件组 权限 步骤 2.5 备份事务日志 3.维护计划 3.1 完整备份 3.2 差异备份

谈谈Python中的生成器表达式和它们的优势

谈谈Python中的生成器表达式和它们的优势 生成器表达式是Python中一个非常强大且高效的功能&#xff0c;它允许我们以一种简洁而直观的方式创建生成器对象。生成器表达式与列表推导式&#xff08;list comprehensions&#xff09;非常相似&#xff0c;但它们在内存使用和执行方…

初学ELK - elk部署

一、简介 ELK是3个开源软件组合&#xff0c;分别是 Elasticsearch &#xff0c;Logstash&#xff0c;Kibana Elasticsearch &#xff1a;是个开源分布式搜索引擎&#xff0c;提供搜集、分析、存储数据三大功能。它的特点有&#xff1a;分布式&#xff0c;零配置&#xff0c;自…

为什么说基于贫血模型的MVC架构违背OOP

我们大部分的业务开发都是MVC架构的&#xff0c;但是我们平时使用的基于贫血模型的MVC架构它对吗&#xff1f;为了搞清楚这个问题&#xff0c;我们先来理清楚几个概念。 一、贫血模型VS充血模型 贫血模型与充血模型是软件开发中两种常见的设计模式&#xff0c;它们各自具有独…

如何进行Python代码的调试和测试?

如何进行Python代码的调试和测试&#xff1f; Python代码的调试和测试是软件开发过程中不可或缺的一部分&#xff0c;它们确保代码的正确性、可靠性和性能。下面将详细讨论如何进行Python代码的调试和测试。 一、Python代码调试 调试是查找并修复代码错误的过程。Python提…

大学英语ab级题搜题软件?分享7个支持答案和解析的工具 #笔记#其他

合理利用学习辅助工具和资料&#xff0c;可以帮助大学生更好地组织学习内容、掌握知识点和提升学术水平。 1.智能翻译官 这是一款多语言在线翻译神器&#xff0c;除了最基础的英语以外&#xff0c;还支持日语、德语、俄语、法语等几十种语言文本翻译和拍照翻译&#xff0c;并…

面试算法-148-轮转数组

题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,…