如何保存二进制文档的历史记录 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yixinlove
V2EX    程序员

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

  •  
  •   yixinlove 2019-05-28 21:46:17 +08:00 2755 次点击
    这是一个创建于 2330 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    使用语言是 Golang。

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

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

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

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

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

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

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

    如果是收集存储了许多资料文档备份的话.... 感觉二级制对比也比较蛋疼...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1477 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:42 PVG 00:42 LAX 09:42 JFK 12:42
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86