有关自建图床类服务 ( 10TB 左右 )有什么坑或者现成的选择吗? 主要避免重复上传文件名哈希 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ClericPy
V2EX    程序员

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

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

    总体大约 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     Solana     5362 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 01:36 PVG 09:36 LAX 17:36 JFK 20:36
    Do have faith in what you're doing.
    ubao msn 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