【问题标题】:Size on Disk of multiple tiny files多个小文件的磁盘大小
【发布时间】: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


【解决方案1】:

数据库完全满足您的需求:您可以存储任意数量的小行/blob,并且它们将被有效地存储。文件系统通常每个文件至少需要一个磁盘集群,这可能就是您的大小扩展如此之大的原因。数据库不这样做。您也可以要求数据库自行压缩。

有可用的嵌入式和独立数据库。

【讨论】:

  • 在这种特殊情况下,我们将以大约每秒 200 个的速率存储、获取、修改和删除 blob 文件表示。我不认为数据库对于这种性质的东西来说是一个可行的选择。我在那个假设中不正确吗?有问题的文件从大约 500b 到 2kb 不等。
  • 是的,这是不正确的,因为 RDBMS 性能因使用模式而异。在我能想到的所有情况下,它都会比您的特定用例的文件系统更快(许多仅通过主键访问的小 blob)。
  • 酷。自从您发表评论以来,我一直在环顾四周,现在我正在考虑将 RavenDB 作为一种可能的解决方案。你有其他数据库可以推荐我研究一下吗?
  • 我宁愿选择一个最常见的也更快的:SQLite、Firebird、BerkeleyDB(按此顺序)。 RavenDB 不是为你想要的而设计的。您需要一种旧的、传统的 RDBMS。
  • 好的,我会检查这些。谢谢您的帮助。一旦我得到一些工作并测试效率,我会将其标记为答案。
猜你喜欢
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 2023-03-29
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多