Linux 将图片保存在本地目录的性能问题

2019-08-07 19:36:16 +08:00
 lowman

项目开发中, 前期不打算搭建文件资源对象服务器, 但是项目中存在用户上传图片及文件的功能, 目前是将图片直接保存在服务器上的某个目录路径下, 然后配置通过 nginx 访问读取图片数据, 那么问题就是, 以这样的方式保存图片(因为 web server 层的原因, 尚且没有办法做到按日期创建目录, 分类保存图片, 目前是所有图片都保存在一个目录下), 当图片数量达到什么样的数量级的时候访问图片会出现比较严重的性能问题????

如果项目运营稳步提升的话, 后续会考虑搭建一个专门的服务器来保存图片资源, 目前也正在调研几个开源项目, 但是就是希望能知道保存在单一目录下的数量瓶颈是多少, 以便后面能及时的迁移.

有那位大佬对这方面的东西比较了解,还望告知一二, 小弟跪谢.............我也会喊 66666666..................手动狗头.gif

5268 次点击
所在节点    Linux
31 条回复
alcarl
2019-08-07 23:56:08 +08:00
可以自己测试的啊,复制几百万文件还不简单,一般都不建议放一个目录里,一台机器一个目录,备份都不好备份,如果炸了就全完了。。。。。
lowman
2019-08-08 08:52:48 +08:00
@alcarl 预估达不到百万级的数据量, 正在写个脚本测一下, 至于容灾方面的东西, 估计得后续看项目运营情况, 小公司, 小项目,成本有限
yidinghe
2019-08-08 09:06:23 +08:00
这个只要磁盘空间够,不会有什么性能问题,如果磁盘 IO 太频繁还可以在 Nginx 上配缓存。
lowman
2019-08-08 09:27:26 +08:00
@yidinghe 刚测试了一下, 在本机测试, 本机浏览器随机访问 nginx 进而获取某个目录的某张图片, 固态硬盘, 复制了 10 万张图片(这里应该远远不止 3w 的说法, 但与文件系统, inode 有关系, inode 用完, 就算磁盘空间再大也写不进去的), 察觉不到任何延迟, 只是进行 ls 之类的操作时有点卡顿现象(应该会随着文件数越大越明显).......如果是这样的话, 项目估计上线以后还能撑一段时间..............看来我就是一个得过且过的程序员..................
crella
2019-08-08 09:54:24 +08:00
我看微信安卓版放图片是根据(hash?)的前几位字符的啊,比如 sfjbxkkb.jpg 就放到./s/f/j/b/sfjbxkkb.jpg ,这个功能拿个 py/rb 挺好实现的啊
hbolive
2019-08-08 10:37:18 +08:00
根据文件名读取文件,几十万都没啥太大问题的。。
lowman
2019-08-08 11:16:46 +08:00
@crella 后台在数据表就保存图片的目录限制住了(需要实现某些需求导致的问题), 后续看情况会搭建专门的服务器保存图片
linbingcheng
2019-08-08 14:17:09 +08:00
上传文件呀,这个东西还是得考虑下安全问题的,搞个 ftp 存应该没错
lowman
2019-08-09 17:44:58 +08:00
@linbingcheng 是上传图片, 目前还没有允许用户上传文本文件的功能 , 至于你说的安全问题, 不知道你担心的是否为恶意用户上传可执行的恶意脚本的问题? 我这里有根据图片内容去判断上传文件是否为图片(不是判断图片尾缀), 如果不是图片文件就不进行保存. 目前也只是做到这一层面的安全验证了.
ungrown
2019-09-12 10:04:50 +08:00
按文件名或者文件内容算出 hash
按前两位或者前四位 hash 分级目录
abcdef...1234.jpg -> /ab/cd/ef...1234.jpg
这个方案被广泛应用,实际证明性能不错,除非你是阿里、腾讯、亚马逊、微软那种云平台厂商的数据量级别
而且其实挺灵活的,你想多加一级目录或者减少一级目录,只要改几行代码,写几行 shell 就行了
lowman
2019-09-25 14:21:41 +08:00
@ungrown 谢谢,是一个思路. 目前已经实现了按日期创建目录保存.

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

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

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

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

© 2021 V2EX