很好奇那些无服务器端的照片同步 APP 是如何在客户端记录同步进度的,是有啥特别的算法吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
codeself
V2EX    程序员

很好奇那些无服务器端的照片同步 APP 是如何在客户端记录同步进度的,是有啥特别的算法吗?

  •  
  •   codeself 2023-11-10 10:03:25 +08:00 1883 次点击
    这是一个创建于 701 天前的主题,其中的信息可能已经有所发展或是发生改变。

    市面上很多照片同步的 app,都是只是通过某种方式,

    比如 webdav,ftp 之类的网络文件共享协议,甚至是 http(s),把客户端上的文件传到 NAS/云盘里去

    除此之外根本不会有其他的服务器交互,所以同步的进度/记录是怎么记录的?

    • 因为一些原因导致同步被暂停/打断,下次如何接着上次的进度继续同步?

    • 有同步过的照片文件重新编辑保存了,如何把这个文件覆盖同步到远程?

    第 1 条附言    2023-11-10 11:26:15 +08:00

    问了下ai,加上了点我自己的思考,大概方案是

    1. 使用一种特定的方式遍历照片文件列表(如,按修改时间倒叙)
    2. 遍历文件列表的时候,记录文件名,文件md5,修改时间到和一个本地存储的已上传文件列表进行对比
      • 如果文件名,文件md5,修改时间中任一项在记录中都没匹配到,加入到待上传列表中
      • 如果文件名,文件md5,修改时间中任一项在记录中匹配到,并且有任何一项发生变化,加入到待上传列表中
    3. 对待上传列表中的文件进行上传
    4. 上传成功的信息更新已上传文件列表
    10 条回复    2023-11-10 15:33:38 +08:00
    ldlywt
        1
    ldlywt  
       2023-11-10 10:30:02 +08:00
    找了很久,也没看见有成熟的 github 开源方案
    Yuhyeong
        2
    Yuhyeong  
       2023-11-10 10:33:52 +08:00
    没了解过,不过在有公网 ip 的情况下,rsync 直接挂载另一台机器也能实现吧?
    robinchina
        3
    robinchina  
       2023-11-10 11:18:20 +08:00
    我想估计类似 BT 下载吧
    wdssmq
        4
    wdssmq  
       2023-11-10 11:18:23 +08:00
    应该是查询一遍文件列表和本地的对比。。
    nxuu
        5
    nxuu  
       2023-11-10 11:28:35 +08:00
    不应该是在本地留一个同步日志么。。。下一次先读日志再进行同步
    bitllion
        6
    bitllion  
       2023-11-10 14:05:47 +08:00
    有个隐藏的日志文件
    AlynxZhou
        7
    AlynxZhou  
       2023-11-10 15:18:03 +08:00
    rsync 应该是有关于它的工作逻辑的文章吧,可以看看。然后 syncthing 这种据说是和 BT 下载算法类似?
    BeautifulSoap
        8
    BeautifulSoap  
       2023-11-10 15:22:34 +08:00
    不用想那么复杂,很多软件同步实际上就是对比文件大小和最后修改时间,复杂点的会给你个是否计算 hash 的选项
    同步的时候遍历双方文件对比下,有变化了就直接覆盖重同步就这么简单粗暴,不管你上次有没有同步过连状态都没有
    gogod112121
        9
    gogod112121  
       2023-11-10 15:26:37 +08:00
    你搜搜 mysql 的主从原理 大同小异
    gogod112121
        10
    gogod112121  
       2023-11-10 15:33:38 +08:00
    或者看一下 redis 的设计与实现 “复制” 章节部分也有相关的内容
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 06:08 PVG 14:08 LAX 23:08 JFK 02:08
    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