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

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

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

    市面上很多照片同步的 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   ·   实用小工具   ·   4585 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:35 · PVG 13:35 · LAX 21:35 · JFK 00:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.