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

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

  •  
  •   ClericPy ·
    ClericPy · 2021-12-02 21:43:15 +08:00 · 3095 次点击
    这是一个创建于 1070 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    感谢帮助

    第 1 条附言  ·  2021-12-02 23:37:31 +08:00
    我直接说要解决的问题吧, 标题描述的不太行. 存储还是使用 S3 或者 OSS

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

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

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

    至于文件路径存储,那就是 MySQL 、mongodb 等数据的事情了
    ClericPy
        6
    ClericPy  
    OP
       2021-12-02 23:33:04 +08:00
    @whileFalse 同样的文件秒传

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


    @cnZary OK 我看看去


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


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


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


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

    最后选择 mongodb 把 cache 内存控制不太大能满足目前使用了, 前面楼层说的挺好, 1 亿以下折腾布隆不够麻烦的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3338 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:32 · PVG 19:32 · LAX 03:32 · JFK 06:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.