【发布时间】:2013-02-17 17:21:48
【问题描述】:
大小:~5mb
磁盘大小:~3gb
我们使用 C# 并在数据更改时不断保存数据,所有文件数据都必须在任何给定时间都可以访问。基本上,如果某些东西改变了该数据的文件,则必须保存。这就是为什么有这么多文件包含这么多数据的原因。数据也得到了极大的处理,因此将所有数据聚集在一起不是一种选择,因为微小的变化会导致无缘无故地保存大量数据。这些文件已经包含了足够多的内容,以至于保存一个对于仅进行很小的更改就几乎是多余的。
当然,有一种方法可以解决这种文件大小的荒谬扩展,并且仍然保留我们已实现的可访问性和节省效率。我们需要一种方法将这些文件打包成 windows 认为是单个文件的文件,但这样我们就不必在发生更改时重写整个文件。
我知道拥有数以千计的小文件很奇怪,但对我们而言,它极大地提高了性能。如果可以避免的话,我们只是不想为了另一种资源而牺牲一种资源。
注意:这些文件有 RLE 二进制数据,它们不是文本文件。
清晰度更新:5mb->3gb = 250mb(50x 簇)-> 150gb = 问题!
【问题讨论】:
-
所以你基本上保留了文件的版本?你知道什么时候不再需要“小文件”吗?
-
3GB 有问题吗?您预计的典型/高可能使用量是多少?硬盘空间便宜。除此之外,可以将数据移动到数据库吗?如果您当前的实现是基于可衡量的性能需求(如您所提到的),我假设您已经尝试过其他明显的方法(例如您建议的一个大文件或数据库)并确定它们还不够?
-
我的猜测:这些文件位于使用大分配单元大小的巨大卷上。如果您打算继续使用大量小文件,请专门使用尽可能小的分配单元格式化卷。对于 4Kb 的 NTFS。
-
工程,几乎按照定义,是相互竞争的技术要求的权衡。在当今世界,3GB 是相当小的磁盘空间需求,而购买 1TB 磁盘是相当合理的。
标签: c# windows hard-drive diskspace