• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ClericPy
V2EX  ›  程序员

有关自建图床类服务 ( 10TB 左右 )有什么坑或者现成的选择吗? 主要避免重复上传文件名哈希

  •  
  •   ClericPy ·
    ClericPy · Dec 2, 2021 · 4019 views
    This topic created in 1622 days ago, the information mentioned may be changed or developed.

    总体大约 3000 万文件吧, 包括图片视频等不同文件, S3 或其他对象存储

    有没有既定方案或者开源项目的, 不知道该搜什么关键词, 找不到就只好自己搭了

    1. 记录原始图片地址转存储路径打算 mongodb 上查, 平时并发不会很高
    2. 存储路径是否存在打算使用带计数器的布隆过滤器(为了可以删除), 有没有坑呢
    3. 用文件内容整个哈希做文件名哈希表, xxhash 怎么样, xxh3_128 作为长度 32 的文件名还能接受, 碰撞应该也安全, 性能比 md5 什么的靠谱

    感谢帮助

    Supplement 1  ·  Dec 2, 2021
    我直接说要解决的问题吧, 标题描述的不太行. 存储还是使用 S3 或者 OSS

    1. 图片视频大量重复, 抽样发现 52% 浪费了, 所以想做秒传相关的缓存机制, 在哈希函数里纠结了一段时间, 贸然选 xxhash3 不知道有没有坑. 缓存数据库用 mongodb 有没有坑(大约 6000 万条以上). 判断文件是否上传过用计数布隆过滤器有没有坑(计数器是用来删除用的)

    2. 收敛各个部门的 S3 上传功能, 避免脚本乱跑以及路径不规范, 并且对用户上传行为做到可审计
    15 replies    2021-12-06 22:49:35 +08:00
    whileFalse
        1
    whileFalse  
       Dec 2, 2021   ❤️ 1
    不是很明白你要解决什么问题。S3 怎么就满足不了你了?
    yuzo555
        2
    yuzo555  
       Dec 2, 2021   ❤️ 1
    @whileFalse 他想要带管理功能的

    这类程序很多,不过感觉都不是很专业,Github 上搜图床一大片
    cnZary
        3
    cnZary  
       Dec 2, 2021   ❤️ 1
    ceph
    cnZary
        4
    cnZary  
       Dec 2, 2021   ❤️ 1
    当然上面那个不含图床的管理功能
    ritaswc
        5
    ritaswc  
       Dec 2, 2021   ❤️ 2
    我的建议是:把文件本身的 sha256 指纹作为文件名存下来
    假如一个 我的祖国.mp3 这个文件的 sha256 是: 11223344556677889900aabbccddeeff
    我会这样存储:/11/22/3344556677889900aabbccddeeff.mp3

    至于文件路径存储,那就是 MySQL 、mongodb 等数据的事情了
    ClericPy
        6
    ClericPy  
    OP
       Dec 2, 2021
    @whileFalse 同样的文件秒传

    @yuzo555 不好弄就只好自己开发了, 实际难度不大, 就是怕有坑


    @cnZary OK 我看看去


    @ritaswc 之前在几种哈希里纠结过, 看到 V2EX 不少人提 xxhash 来着. sha256 也是可选项之一
    ericgui
        7
    ericgui  
       Dec 3, 2021   ❤️ 1
    min.io
    你可以自建类似 s3 的服务
    AyaseEri
        8
    AyaseEri  
       Dec 3, 2021
    图像有专门的哈希方案,虽然我也不知道目前的图像哈希算法好不好使
    oott123
        9
    oott123  
       Dec 3, 2021
    hash 选 sha 系列的话,OSS 之类的可能服务端能帮你算好,选 xxhash 就未必了
    布隆过滤器我觉得没必要,就亿级不到的东西,随便找个数据库就行了
    zifangsky
        10
    zifangsky  
       Dec 3, 2021   ❤️ 1
    存储文件名弄一个分布式的自增序列(比如:雪花算法)然后把 ID 转 62 进制就行
    ungrown
        11
    ungrown  
       Dec 3, 2021   ❤️ 3
    这不就是各大 booru 站点吗。
    booru 站点就是 danbooru 这一类 imageboard 网站,即贴图讨论版,内容其实包括图片、视频、wiki 等。由用户上传内容,文件直接按照 hash 命名存储 /去重,额外标记元数据,让用户自行打标签,在此基础上实现内容的审查、发布、搜索、访问、排行榜、推荐。
    甚至这套建站模板都是开源的,更有魔改和变种,很多涩图站都是这种(瑟琴果然是第一生产力
    Ciallo
        12
    Ciallo  
       Dec 3, 2021   ❤️ 1
    minio
    ClericPy
        13
    ClericPy  
    OP
       Dec 3, 2021
    @ericgui
    @Ciallo
    min.io 看到过好几次, 我看一下, 谢谢. 目前主要是想做个 S3 文件上传下载管理系统, 一方面秒传避免重复文件太多, 一方面审计一下


    @ungrown 大哥... 你让我在上班期间打开了一个本来不该打开的网站.......


    @oott123 你说的是类似 etag 那个东西么, 我主要是上传之前提前算出来然后比对一下避免重复上传的. 然后还不太想绑定服务商. 不过你说的数据量太小确实了, 今天技术评审我也提出来了这么点数据哈希表没啥问题, 计划 mongodb KV 存一下不知道会有坑么, 主要是在意成本, 选布隆还是想省钱, 看了一天布谷鸟过滤器了


    @AyaseEri 其实就是想找一个圈内规范级别的. 目前 xxhash 因为 lz4 背书所以还是挺期待的
    ungrown
        14
    ungrown  
       Dec 6, 2021
    @ClericPy #13
    > 大哥... 你让我在上班期间打开了一个本来不该打开的网站.......
    我还特意提了一下这些大多是涩图站,不过确实不够着重。
    不过 danbooru 这个还好哦,算口味清淡的了,关得够快的话别人顶多以为是个二次元图站。
    要 SFW 的话,刚刚搜了一下,safebooru ,这个不涩。
    ClericPy
        15
    ClericPy  
    OP
       Dec 6, 2021
    @ungrown 我来这骗方案呢, 结果我让同事当鉴黄师了.... 跑题了

    最后选择 mongodb 把 cache 内存控制不太大能满足目前使用了, 前面楼层说的挺好, 1 亿以下折腾布隆不够麻烦的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3990 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 05:12 · PVG 13:12 · LAX 22:12 · JFK 01:12
    ♥ Do have faith in what you're doing.