BSDiff算法

article/2025/9/18 19:11:35

https://blog.csdn.net/add_ada/article/details/51232889

BSDiff是一个差量更新算法,它在服务器端运行BSDiff算法产生patch包,在客户端运行BSPatch算法,将旧文件和patch包合成新文件。

 

差量更新算法的核心思想

尽可能多的利用old文件中已有的内容,尽可能少的加入新的内容来构建new文件。通常的做法是对old文件和new文件做子字符串匹配或使用hash技术,提取公共部分,将new文件中剩余的部分打包成patch包,在Patch阶段中,用copying和insertion两个基本操作即可将old文件和patch包合成new文件。

 

BSDiff算法的改进

Insertion操作会引起大量的指针变动和修改,要记录这些值才能在Patch阶段给修改过的区域重新定位,由于这些指针控制字必须在BSDiff阶段加入patch包,产生的patch包会较大。BSDiff通过引入diff string的概念,大大减少了要记录的指针控制字的数目,从而使得patch包更小。

 

基本定义

 


BSDiff基本步骤

BSDiff的三个基本步骤如下:

 

1.对old文件中所有子字符串形成一个字典;

2.对比old文件和new文件,产生diffstring和extra string;

3.将diffstring 和extra string 以及相应的控制字用zip压缩成一个patch包。

 

步骤1.是所有差量更新算法的瓶颈,时间复杂度为O(nlogn),空间复杂度为O(n),n为old文件的长度。BSDiff采用 Faster suffix sorting方法获得一个字典序,使用了类似于快速排序的二分思想,使用了bucket,I,V三个辅助数组。最终得到一个数组I,记录了以前缀分组的各个字符串组的最后一个字符串在old中的开始位置

步骤2.是BSDiff产生patch包的核心部分,详细描述如下:


步骤3.将diff string 和extrastring 以及相应的控制字用zip压缩成一个patch包。


可以看出在用zip压缩之前的patch包是没有节约任何字符的,但diff strings可以被高效的压缩,故BSDiff是一个很依赖于压缩与解压的算法!

 

BSPatch基本步骤

客户端合成patch的基本步骤如下:

 

1.接收patch包;

2.解压patch包;

3.还原new文件。

 

三个步骤同时在O(m)时间内完成,但在时间常数上更依赖于解压patch包的部分,m为新文件的长度

 

复杂度分析

根据以上步骤,不难得出BSDiff与BSPatch的时间与空间复杂度如下:

 

BSDiff

时间复杂度  O(nlogn)  空间复杂度 O(n)

BSPatch

时间复杂度  O(n+m)   空间复杂度  O(n+m)

 

另外给出BSDiff压缩效率实验数据:

图片来源:CompressingDifferences of Executable Code

 

参考文献

Naïve Differences of ExecutableCode

https://www.researchgate.net/publication/2890146_Naive_Differences_of_Executable_Code

Compressing Differences ofExecutable Code

https://www.researchgate.net/publication/2379631_Compressing_Differences_of_Executable_Code


http://chatgpt.dhexx.cn/article/MpKaV1kp.shtml

相关文章

MFBI

MFBI MFBI: Multi-Frequency Band Indicator 之前在写” Carrier frequency 和 EARFCN的关系”, 提到过MFBI. 简单的讲就是不同band间对应的frequency 的范围之间有overlapping, 一个frequency 可能对应多个band. 比如2595MHz 即属于band38 又属于band41. 关于那些band间存…

Python的内置函数(BIF)与变量的使用

Python的内置函数(BIF)与变量的使用 1、内置函数 使用dir()可查看所有的内置函数 dir(__builtins__)使用help()可查看内置函数的功能,例如: help(UserWarning)2、input函数 作用是在控制台输入数据,返回的是字符串…

Python内置函数(BIF)查询(附中文详解说明)

我们知道,Python 解释器内置了一些常量和函数,叫做内置常量(Built-in Constants)和内置函数(Built-in Functions),来实现各种不同的特定功能,在我的另外一篇博客中 第8章&#xff1a…

【BF算法】

BF 算法 BF 算法精讲 在学习到字符串的匹配问题时,了解到了BF算法和KMP算法。 对比这两个算法,先了解BF算法; 字符串匹配问题,比如说:有一个主串 “abbbcdef” , 子串 “bbc”,该问题就是在主…

BIF

python3的内置函数

Python中常见BIF及使用方法

前提说明: BIF:(built-in functions)内置函数 目的:为了方便程序员快速的编写程序 1.查看Python内置函数命令: dir(__builtins__) print(dir(__builtins__))结果如下: 2.help查看使用方法 如: hel…

认识BIF

1.打开IDLE窗口,file新建一个窗口,输入以下代码: 点击file,save保存,接着点击run,或者F5执行 Python对于缩进的命令很敏感,如果这样改就会错误 else后面的冒号可以智能进行缩进,回车…

python中的几个概念:BIF,函数,方法,模块,包,库

一、BIF(built in founctions,内置函数):python自带函数,直接调用即可,python3自带函数如下: 二、函数(function):就是方法,使用def 定义 三、模…

SQL优化面试专题

介绍: 无论您是创建Web应用程序的开发人员,还是参与Web测试的DBA或测试人员,SQL方面的技巧在数据库编程和数据库验证中都非常重要。因此,我们整理了QL性能优化方面的面试问题。 SQL性能优化是一项艰巨的任务,并且是处…

有哪些SQL优化的手段?

文章目录 1.1 SQL的性能分析1.1.1 通过 show status 命令了解各种 SQL 的执行频率1.1.2 慢查询日志1.1.3 profile分析1.1.4 通过 EXPLAIN 分析低效 SQL 的执行计划 1.2 常用的SQL语句优化 1.1 SQL的性能分析 当面对一个有 SQL 性能问题的数据库时,我们应该首先进行系…

SQL优化终于干掉了“distinct”

SQL优化之多表联合查询干掉“distinct”去重关键字 一、优化目的二、优化之前的sql长这样三、DISTINCT关键字的用法四、谈:如何优化distinct的sql五、distinct真的和group by等价吗?六、优化后的sql长啥样?七、总结2020.10.14更【来自评论区大佬的精彩观…

SQL关于Date类型时间段查询优化(时间跨度稍长)(记一次自己工作开发中遇到的SQL优化经验)

前言 以下用于SQL查询的数据均为测试环境的数据,关键数据都已打码。 背景 我们的日常开放中都会遇到 查询某个时间段的数据,像这样: select * from test(表名) where time BETWEEN 2022-08-20 00:00:00 AND 2022-09-19 00:00:00但如果时间…

MySql基础知识总结(SQL优化篇)

🍅 作者简介:CSDN2021博客之星亚军🏆、新星计划导师✌、博客专家💪 🍅 哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师 🍅 关注公众号【哪吒编程】,回复1024&a…

【高级开发必掌握SQL】SQL优化篇

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主&#x1f3…

SQL优化方案

转载至:http://blog.itpub.net/31555484/viewspace-2565387/ 作者1:惨绿少年 https://www.cnblogs.com/clsn/p/8214048.html 作者2:喜欢拿铁的人 https://zhuanlan.zhihu.com/p/49888088 在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程&am…

慢SQL优化

1、慢查询统计 show VARIABLES like %que% SET GLOBAL slow_query_log on; //开启慢sql统计开关 SET GLOBAL long_query_time 1; //设置超过1秒则 认为是慢sql , 注意此处设置完之后需要重新链接客户端 才可以查看到设置成功 2、优化 索引优化 通过执行计划&…

Oracle数据库SQL优化详解

Oracle数据库SQL优化 1. Oracle SQL优化概述2. Oracle SQL优化详解2.1 Oracle 查询阻塞2.2 Oracle 查询耗时 SQL2.3.Oracle 查看执行计划2.4.Oracle 查看收集统计信息2.5.Oracle 查询优化器 -- 改写查询语句2.6.Oracle 查询优化器 -- 访问路径2.7.Oracle 查询优化器 -- 表连接方…

Mysql sql优化

这里引用深入Mysql实战 为什么要优化 提高资源利用率避免短板效应提高系统吞吐量同时满足更多用户的在线需求 简单来说,优化的目的是为了提高资源的利用率,让资源充分发挥价值。常见场景下,一台服务器有四大资源:cup、内存网络…

sql优化的15个小技巧

最近找了找怎么优化SQL,总结了15个基础技巧 因为最近一直在写sql的原因,所以需要知道sql该怎么优化,怕哪一天线上的接口,出了问题,需要优化,就需要采用改造成本最小的. 先上个导图 1.避免使用 select * 很多时候,我们写sql语句时,直接使用select *&am…

聊聊sql优化的15个小技巧

前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。 如果某天你负责的某个线上接口,出现了性能问题,需要做优化。那么你首先想到的很有可能是优化sql语句,因为它的…