几百万张缩略图硬盘存储方案?

2019-06-03 18:06:47 +08:00
 hardwork

怎么存储才能较高效读写,每张图片也就几 k 到几十 k,之前存在一个文件夹下,inode 太大,rm -rf 都要删很久很久,就像卡死了一样.

c++的小服务,有什么存储库可用吗,或者如何分散合并到硬盘?

4220 次点击
所在节点    程序员
30 条回复
keepeye
2019-06-03 18:15:20 +08:00
上 hdfs 之类的文件系统?小文件合并存储,当然读取的话要走接口了
also24
2019-06-03 18:17:32 +08:00
噗嗤,之前存过几十万张,每张 0.5~1MB 左右的,即使丢进 SSD,读写的时候还是想死,关注一下大家有什么好方案
hardwork
2019-06-03 18:17:38 +08:00
@keepeye 只是个小服务,而且这个量级好像也没必要使用第三方云服务,linux 自带文件系统搞定搞定最好
aquariumm
2019-06-03 18:18:08 +08:00
最方便的就是生成然后上传到 oss
Jirajine
2019-06-03 18:18:21 +08:00
用私有格式直接合并存储合并读写
andyzhshg
2019-06-03 18:18:53 +08:00
leveldb 之类的 kv 应该可以吧?
keepeye
2019-06-03 18:24:44 +08:00
要不 直接丢到 mongodb 里?
Livid
2019-06-03 18:25:32 +08:00
早点习惯用云解决这类问题,就可以早点从这类问题背后的性能、备份、CDN 等等更细节的问题里解脱出来。
goreliu
2019-06-03 18:25:35 +08:00
这个还要看具体是怎么读写的。比如读、新增、删除文件都是什么频率的。

如果图片的大小相差不大,可以这样简单实现。把图片按大小分成几类,比如小于 10k、10k - 30k、30k、50k 等等。然后为每类图片分配一个大文件和索引文件。像 10k 文件按 10k 的块来使用,在索引文件记录文件名和对应文件偏移。

这样虽然会浪费一些空间。但写入读取(因为省去打开关闭过程,比单文件读要快)、删除(只需要写索引文件)图片都非常快。

如果不想费事,可以找个 kv 数据库,但性能会差些。
swulling
2019-06-03 18:30:23 +08:00
本地的话建议用 LevelDB 或者 rocksdb 这种本地 kv 存储
Klingon
2019-06-03 18:32:06 +08:00
图片量不小了。可以用阿里云腾讯云,不放心的话可以用 minio 搭建个私有存储。
dsnake1984
2019-06-03 18:33:31 +08:00
腾讯 cos 便宜好用~ 不烦神。
cy97cool
2019-06-03 18:36:16 +08:00
seaweedfs
snappyone
2019-06-03 18:42:04 +08:00
一定自己存的话肯定不能丢一个文件夹,文件名 hash 之后取 hash 前缀分文件夹存试试
xuddk727
2019-06-03 18:47:34 +08:00
了解一下 mr4c, google earth engine?
aec4d
2019-06-03 20:26:34 +08:00
直接用 ext4 存了千万级缩略图的表示,没什么性能问题,跑的很欢,不需要特别做优化
原图是存在了 S3 上,本地缩略图再不济可以获得原图再生成一次缩略图

https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html
opengps
2019-06-03 20:31:02 +08:00
必须用单机环境的话,你得知道目录下最多 500 张
justou
2019-06-03 20:40:35 +08:00
HDF5 可以了解一下
https://www.hdfgroup.org/
dog
2019-06-03 20:53:50 +08:00
@opengps 为啥最多 500 张?
winglight2016
2019-06-03 20:55:28 +08:00
百万级的文件,单机不好搞了吧,不想上专门的文件系统,也可以导入 RMDB 里面

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/570453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX