首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  程序员

如何保存二进制文档的历史记录

  •  
  •   yixinlove · 172 天前 · 1188 次点击
    这是一个创建于 172 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT,现在老板要保留文件的历史记录。现在的想法是: 保存每个记录之前的差异部分,这就需要做二进制差异分析,看了网上好像使用的是 bsdiff/bspatch 这个算法,经过测试,发现 CPU 和内存占用开销还能说得过去。只是如果要夸几个版本恢复需要用 bspatch 算法计算几次,成本会比较高。

    想问问,这种差异性算法还有其他做法吗?有没有 Git 相关概念实现可以应用到服务端的。

    使用语言是 Golang。

    11 回复  |  直到 2019-05-29 11:05:59 +08:00
        1
    ysc3839   172 天前
    git lfs?
        2
    shuax   172 天前
    要什么差异,那是拿来增量更新的。
        3
    crayygy   172 天前
    二进制的要 diff 做什么?
        4
    goreliu   172 天前 via Android   ♥ 1
    “二进制文件”过于笼统,如果想 diff 的话,最好还是要根据文件类型来做。比如两个压缩包,如果不解压直接 diff,结果是没法看的。
        5
    24owls   172 天前
    rdiff 可以用来 "compute and apply signature-based file differences",用的是 rsync 的算法

    rdiff 配套的工具有 rdiffdir 和 duplicity,duplicity 包装好了一些功能,可以直接用来 "incrementally backs up files and directory"

    rdiff 和 duplicity 我都没有实际用过,不知道效果怎么样
        6
    dorentus   172 天前 via iPhone
    直接存每个版本的原始文件,没必要 diff
        7
    yuikns   172 天前 via iPhone
    较大部分是相同的是适用于 diff 的前提,而大多数二进制并不是。

    比如一个人 docx 文档,它本质是一个压缩包,里面内容修改后,二进制记录区别很大。
    如果可以,我建议还是版本管理 rdf 或者 latex 吧,或者干脆算个 hash 保存,避免存储冗余的二进制完事。
    要是闲得慌,也可以把它切成一堆小的 chunks 按照 hash 保存
        8
    mogging   172 天前
    坚果云做到了,具体细节不清楚
        9
    yixinlove   172 天前
    @ysc3839 git lfs 看过,但是这边是准备用 golang 写的一个服务端程序需要支持。
    @shuax @crayygy 我描述写的是二进制文件,譬如 doc/pdf 这类。就是想保存差异部分,节省存储空间,现在我们这些文档是保存在云服务商的。

    @24owls 多谢,我去研究下,看看是否可行。

    @dorentus 是的,我们也想过直接存 snapshot,不过考虑到存储成本,还是想用 diff。不过这也是在调研阶段。

    @yuikns 是的,我看过 docx 格式,试过用 bsdiff 算出差异,在只增加一行文字的情况下,差异部分竟然占新文件的 70%(比例不固定,这里试的是 100K 大小的文件),压缩后确实是 diff 效果不大。所以想看看有没有其他计算方式。
        10
    yuikns   172 天前 via iPhone
    如果特指 docx,可以把它当文件夹管理。go 内置了 zip 格式的读写
        11
    zpf124   172 天前
    文档的话, 如果是内部自己人写的文档,可是试着推一下 用 ASCIIDoc 重写, 比 md 格式全一些,而且也是文本内容 diff 非常容易.

    如果是收集存储了许多资料文档备份的话.... 感觉二级制对比也比较蛋疼...
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2255 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 08:28 · PVG 16:28 · LAX 00:28 · JFK 03:28
    ♥ Do have faith in what you're doing.