V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rykinia
V2EX  ›  问与答

一亿个图片和 pdf 文件,单机,只新增不删除,怎么管理?

  •  
  •   rykinia · 2021-11-04 08:44:25 +08:00 · 2514 次点击
    这是一个创建于 1116 天前的主题,其中的信息可能已经有所发展或是发生改变。
    领导说 OSS 太贵了,自己搞了个服务器,拿几个机械硬盘组了个 RAID5 ,15T 容量。

    我目前是格式化成了 XFS ,挂载参数调了下,然后根据前缀保存到不同的 zip 文件中,比如 000xxx.jpg 就保存到 000.zip ,zip 用 store 方式不压缩。

    但越往后写入越慢,猜测还是有碎片,或者写入方式有问题(看了下 zip4j 是复制一个新的包加进去然后删掉原来的,如果能直接写而不创建新的也许好很多)。

    不知道有没有更好点的方法,seaweed 似乎单节点最大 8T 不方便,hbase 的 mob 可行吗?
    16 条回复    2021-11-13 10:59:16 +08:00
    kokutou
        1
    kokutou  
       2021-11-04 08:49:35 +08:00
    机械盘不会是叠瓦吧。。。
    垂直机械盘越往后并不会越慢啊。
    kokutou
        2
    kokutou  
       2021-11-04 08:51:25 +08:00
    想起来那个确实会越慢,但是是内外圈的区别。
    最后剩余的几个 t 就不要用了。

    比如这种 4t 的,最后 3200-4000gib 的我就分个区存视频了。

    kokutou
        3
    kokutou  
       2021-11-04 08:53:11 +08:00
    可以试试加个临时盘,zip 写完了后,再复制进去,就是完整的大文件,不是碎片了。
    wangxkww
        4
    wangxkww  
       2021-11-04 08:54:40 +08:00
    为啥要把数据打包成 zip ?方便批量下载么?
    murmur
        5
    murmur  
       2021-11-04 09:05:53 +08:00
    叠瓦盘的问题是读写一起并发会雪崩甚至卡住,复制一个新包删掉原来的大概率就是读写问题
    ziseyinzi
        6
    ziseyinzi  
       2021-11-04 09:07:42 +08:00
    为啥 zip+1,直接用文件夹呢?
    Tianao
        7
    Tianao  
       2021-11-04 09:16:18 +08:00
    @kokutou #1 任何机械盘都存在磁盘碎片问题啊。
    rykinia
        8
    rykinia  
    OP
       2021-11-04 09:17:04 +08:00
    @kokutou 倒不是,是企业盘
    cheng6563
        9
    cheng6563  
       2021-11-04 09:19:34 +08:00
    zip 附加文件基本都是文件碎片,建议直接建目录放文件。
    除非你真的要分布式存储不然不要用 seaweed hbase 什么的,性能最好的就是文件系统直接放文件。
    机械盘不是叠瓦的吧,叠瓦盘写入就是会爆炸的。
    rykinia
        10
    rykinia  
    OP
       2021-11-04 09:21:52 +08:00
    @wangxkww 文件多了以后,ls 之类的命令就没法用了,会卡死。然后,根据这个 http://genomewiki.ucsc.edu/index.php/File_system_performance#ext4_filesystem
    理论上文件数量多了以后性能还是会下降,所以我想的是加一个类似索引的步骤
    reallittoma
        11
    reallittoma  
       2021-11-04 09:33:10 +08:00
    你这里 zip 相当于又一个文件系统了,文件系统套文件系统,能不慢吗
    heguangyu5
        12
    heguangyu5  
       2021-11-04 09:41:52 +08:00
    有个 lib 叫 LMDB, http://www.lmdb.tech/doc/
    基于 LMDB 有个项目叫 memcachedb, https://github.com/LMDB/memcachedb
    可以对 memcachedb 做下改造,新增加一个 mmap 的巨大文件(当然要控制一下这个文件占用的 file cache 大小),然后把图片和 pdf 文件保存到这个大文件里,然后将 offset 保存到 memcachedb 的 LMDB 文件里,再让 LMDB 文件始终都在内存里.
    这样文件的查找和新增都是在操作内存中的 LMDB,文件的写入和读取都是基于 mmap,只要内存稍大一点,应该就不是问题了.
    kokutou
        13
    kokutou  
       2021-11-04 09:42:52 +08:00
    @Tianao #7
    另外分个区里写 zip ,zip 写满了后,再复制过去就可以避免碎片了
    但是要是随机的往每个 zip 里写,不存在写完一个 zip ,这方法就不行。
    cpstar
        14
    cpstar  
       2021-11-04 09:50:06 +08:00
    公有 OSS 太贵。自己搞服务器,上 minio 啊,弹性扩展,也还是对象存储
    wangxkww
        15
    wangxkww  
       2021-11-04 09:57:55 +08:00
    @rykinia 那用多级文件夹感觉就可以吧,这样还好配合 minio 直接提供访问服务
    rykinia
        16
    rykinia  
    OP
       2021-11-13 10:59:16 +08:00
    @wangxkww minio 单机也相当于直接操作硬盘里的文件,这个还是要多台服务器才能发挥出来实力。

    我最后搭了个 hbase 解决了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:17 · PVG 22:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.