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

怎样最快的方式检测两台服务器之间的某个图片完全一样?

  •  
  •   kisshere · 2019-12-24 13:35:30 +08:00 · 3254 次点击
    这是一个创建于 1797 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主服务器 A 有一张图片,备份服务器 B 要时刻抓取服务器 A 上的图片到 B,B 服务器抓取之前需要判断 A 服务器上的图片在 B 服务器上是否有一模一样的图片,那么,怎样以最快的方式判断 A 服务器山的该图片和 B 服务器上的该图片完全一样?

    23 条回复    2019-12-24 19:40:26 +08:00
    Dex7er
        1
    Dex7er  
       2019-12-24 13:56:24 +08:00
    比较好奇为什么会不一样?
    whileFalse
        2
    whileFalse  
       2019-12-24 14:02:22 +08:00
    如果每张图片都有单独的名字,只是有可能内容会变,可以尝试使用 If-Modified-Since 之类的方式。
    不过我还是觉得你应该更详细地描述需求。
    doveyoung
        3
    doveyoung  
       2019-12-24 14:05:00 +08:00
    不是太明白你的意思,是要对比两个服务器上的文件一样吗?
    md5 计算一下再对比
    also24
        4
    also24  
       2019-12-24 14:10:11 +08:00 via Android
    首先,你这个 “抓取”,是走什么协议的?

    http ? nfs ? ftp ? rsync ? 或者自己实现的私有协议?
    terrywater
        5
    terrywater  
       2019-12-24 14:10:25 +08:00
    md5 计算文件,看看值是否相同
    terrywater
        6
    terrywater  
       2019-12-24 14:10:54 +08:00
    云盘的秒传,
    Songxwn
        7
    Songxwn  
       2019-12-24 14:11:58 +08:00
    哈希值呗。
    zappos
        8
    zappos  
       2019-12-24 14:13:56 +08:00 via Android
    图片不要用单独的名字,就用它的 hash。单独的名字存数据库里。
    vone
        9
    vone  
       2019-12-24 14:14:30 +08:00
    如果是通过 http 传输的话可以使用 HTTP 协议中的 etag 和 if-none-match。
    例如:
    请求头包含 if-none-match: "1d4577fa453bc8b"
    响应头为 etag: "1d4577fa453bc8b"
    此时服务器会返回 304,代表文件未变化。
    etag 值为 HTTP 协议的规范,服务端程序会自动返回。同步程序需要做的就是储存此值,等待第二次下载时在请求头的 if-none-match 中写入此值。
    ZXCDFGTYU
        10
    ZXCDFGTYU  
       2019-12-24 14:51:21 +08:00
    md5 一下文件不就解决了?
    zcfnc
        11
    zcfnc  
       2019-12-24 16:30:43 +08:00
    点进来之前还以为是用图片识别像素点来判断呢。。。。
    lihongjie0209
        12
    lihongjie0209  
       2019-12-24 16:37:46 +08:00
    既然是备份, 那就是文件级别的, 和文件中存储什么内容没关系.
    基于 hash 或者是文件名或者是最后修改时间都可以做.

    我推荐 rsync
    DJQTDJ
        13
    DJQTDJ  
       2019-12-24 16:42:18 +08:00
    说好的图像识别文字识别呢?
    怎么最后变成 HTTP 传输头和 MD5 了
    wsbnd9
        14
    wsbnd9  
       2019-12-24 16:43:41 +08:00
    md5sum 文件
    qilishasha
        15
    qilishasha  
       2019-12-24 16:45:26 +08:00
    用文件码比对起来非常耗资源,数量级一大,就麻烦了。只能在存储的时候想办法了,比如那个啥 mongodb 的 gridfs 什么的,这样就省去了比对环节,而且同步起来也蛮方便的呀……
    kisshere
        16
    kisshere  
    OP
       2019-12-24 16:58:13 +08:00
    @terrywater
    @wsbnd9 怎样在 http 请求中获取远程服务器文件的 MD5 值?
    elevioux
        17
    elevioux  
       2019-12-24 17:18:51 +08:00
    抓取是怎样抓取的呢?
    http?
    做备份的话,用 rsync 之类的方案更妥吧。
    yoshiyuki
        18
    yoshiyuki  
       2019-12-24 17:20:48 +08:00
    定时调用 rsync,然后开启 rsync 的增量备份选项即可
    beastk
        19
    beastk  
       2019-12-24 17:24:26 +08:00 via iPhone
    最快的应该是这样,B 抓取 A 图片时先对比 md5,如果没有匹配中,那么 A 在头部加入 md5,B 保存图片和 md5 入库。
    hzgit
        20
    hzgit  
       2019-12-24 17:42:16 +08:00
    摘要算法
    cmingxu
        21
    cmingxu  
       2019-12-24 18:48:31 +08:00
    MD5 取摘要,bloom filter 判断是否存在
    smartjohn
        22
    smartjohn  
       2019-12-24 18:52:00 +08:00
    RSYNC 了解一下
    piloots
        23
    piloots  
       2019-12-24 19:40:26 +08:00
    7#正解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   918 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:10 · PVG 05:10 · LAX 13:10 · JFK 16:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.