首页 新闻 会员 周边 捐助

Windows大量小文件存储方案

0
悬赏园豆:10 [已解决问题] 解决于 2014-10-13 09:51

内部系统,图片做存档使用,目录是/业务Id /工号/日期/小时/   只保留一个月的存档。

磁盘总大小约14T,

有一个服务负责接收文件存储

另一个服务负责删除日期为31天前的文件夹,

现在发现删除非常缓慢,甚至在删除的时候影响存储的服务

有没有好的解决办法?

王者永乐的主页 王者永乐 | 初学一级 | 园豆:29
提问于:2014-10-08 17:56
< >
分享
最佳答案
0

不知道你说的缓慢是怎么个缓慢的:

1、是因为要删除的文件很多,删除的时候缓慢?

2、是因为要检索哪些是过期的文件,从而导致缓慢?

如果是第一个原因,这个还真的没办法,真这样,建议你用数据库来存储文件最好。

如果是第二个原因,你可以在接收文件服务里把所接收的文件信息(路径、日期)存储到数据库,然后在第二个服务里从数据库检索过期文件再执行删除操作,同时删除数据库里的相应记录。

收获园豆:5
519740105 | 大侠五级 |园豆:5810 | 2014-10-08 18:21

是第一个原因,为什么数据库存储文件就能解决?

王者永乐 | 园豆:29 (初学一级) | 2014-10-08 18:35

@王者永乐: 通过SQL存储大量的小型文件,然后把删除的效率问题交给数据库来执行,性能相对要好点。因为那是基于块的数据操作,而在文件系统中是基于文件系统的,性能自然区别很大,你可以试试看。

 

此外,删除文件你可以分阶段的部分删除,不要一次性的集中删除海量文件,性能也会大大提高。

519740105 | 园豆:5810 (大侠五级) | 2014-10-08 18:47
其他回答(3)
0

把31天前的文件夹重命名为最新日期,覆盖原文件。

收获园豆:2
Launcher | 园豆:45050 (高人七级) | 2014-10-08 18:00

想法很赞,但是我们每个文件夹中的文件个数不是固定的,文件和文件按照时间顺序有一定的逻辑性。

所以这种覆盖的方法除了无法覆盖完全外还会打乱这个逻辑。

支持(0) 反对(0) 王者永乐 | 园豆:29 (初学一级) | 2014-10-08 18:12

@王者永乐: 当然,你最了解你的需求,而我只是泛泛的提供最佳的磁盘操作方式,因此你还是需要根据你的需求结合磁盘读写的特点来考虑解决方案。我这里还可以提供一种常用的方式,建立一个大的磁盘文件,将小文件按照一定的逻辑存储在这个大的磁盘文件上,这个大的磁盘文件可以根据业务Id或者日期来划分。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2014-10-09 09:17
0

如果是我,就直接分32个分区,每天的图片放到一个分区,对不需要的分区进行快速格式化,这些分区循环使用,这样的速度应该很快,也不会因为长时间访问硬盘影响到其它服务

收获园豆:3
诶碧司 | 园豆:1912 (小虾三级) | 2014-10-08 22:42

简单粗暴,总感觉32个分区的画面太美,不忍直视。

不过话说回来,因为文件每天的大小有较大差别。比如周六日就没有多少,而工作日是周六日三到四倍,如果分区的话,每个分区的最小容量我都得按照最大业务量去设计,这样算下来担心磁盘空间不足。

支持(0) 反对(0) 王者永乐 | 园豆:29 (初学一级) | 2014-10-09 09:30
0

硬盘1T才多少钱?简单粗暴的就是最有效的方法了。你大不了多买10T硬盘就是了。

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-10-09 11:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册