Memory 2个文件,内容的一半,而1个文件,内容的两倍,哪个更大?
如果我有两个文件,每个文件都包含以下内容: “你好,世界”(x1000) 这是否占用了比1个文件更多的空间: “你好,世界”(x 2000) 将内容划分为多个较小文件的缺点是什么(假设有理由将内容划分为更多文件,而不是像本例那样) 更新:Memory 2个文件,内容的一半,而1个文件,内容的两倍,哪个更大?,memory,file,size,Memory,File,Size,如果我有两个文件,每个文件都包含以下内容: “你好,世界”(x1000) 这是否占用了比1个文件更多的空间: “你好,世界”(x 2000) 将内容划分为多个较小文件的缺点是什么(假设有理由将内容划分为更多文件,而不是像本例那样) 更新: 我用的是MacBookPro,10.5。但是我也想知道Ubuntu Linux的情况。大多数文件系统使用固定大小的集群(4KB是典型的,但不是通用的)来存储文件。低于此群集大小的文件都将占用相同的最小数量 即使超过这个大小,当您有很多小文件时,比例损耗也会很高
我用的是MacBookPro,10.5。但是我也想知道Ubuntu Linux的情况。大多数文件系统使用固定大小的集群(4KB是典型的,但不是通用的)来存储文件。低于此群集大小的文件都将占用相同的最小数量 即使超过这个大小,当您有很多小文件时,比例损耗也会很高。忽略大小分布的不均匀性(这会使事情变得更糟),总体浪费大约是集群大小乘以文件数的一半,因此对于给定的数据量,文件越少,存储的效率就越高 另一个需要考虑的问题是元数据操作,特别是文件删除,可能非常昂贵,因此较小的文件也不是您的朋友。ReiserFS在这方面做了一些有趣的工作,直到作者因谋杀妻子而入狱(我不知道该项目的现状) 如果您可以选择,您还可以调整文件大小,使其始终填充整个集群,这样小文件就不会成为问题。但这通常过于挑剔,不值得这么做,而且还有其他成本。对于高容量吞吐量,目前的最佳文件大小是64 MB到256 MB(我认为)
实用建议:除非有充分的理由不这样做,否则请将您的资料保存在数据库中。SQLite大大减少了原因的数量。大多数文件系统使用固定大小的集群(4KB是典型的,但不是通用的)来存储文件。低于此群集大小的文件都将占用相同的最小数量 即使超过这个大小,当您有很多小文件时,比例损耗也会很高。忽略大小分布的不均匀性(这会使事情变得更糟),总体浪费大约是集群大小乘以文件数的一半,因此对于给定的数据量,文件越少,存储的效率就越高 另一个需要考虑的问题是元数据操作,特别是文件删除,可能非常昂贵,因此较小的文件也不是您的朋友。ReiserFS在这方面做了一些有趣的工作,直到作者因谋杀妻子而入狱(我不知道该项目的现状) 如果您可以选择,您还可以调整文件大小,使其始终填充整个集群,这样小文件就不会成为问题。但这通常过于挑剔,不值得这么做,而且还有其他成本。对于高容量吞吐量,目前的最佳文件大小是64 MB到256 MB(我认为)
实用建议:除非有充分的理由不这样做,否则请将您的资料保存在数据库中。SQLite大大减少了原因的数量。文件以集群的形式在磁盘上占用空间。集群是由多个扇区组成的,其大小取决于磁盘的格式化方式 集群的典型大小是8KB。这意味着两个较小的文件将分别使用两个集群(16 KB),而较大的文件将使用三个集群(24 KB)
平均而言,一个文件将比其大小多使用半个集群。因此,如果群集大小为8 KB,则每个文件的平均开销为4 KB。文件以群集的形式在磁盘上占用空间。集群是由多个扇区组成的,其大小取决于磁盘的格式化方式 集群的典型大小是8KB。这意味着两个较小的文件将分别使用两个集群(16 KB),而较大的文件将使用三个集群(24 KB)
平均而言,一个文件将比其大小多使用半个集群。因此,集群大小为8 KB时,每个文件的平均开销为4 KB。Marcelos给出了一般性能情况。我认为担心这是过早的优化。您应该将内容拆分为不同的文件,在这些文件中拆分它们是合乎逻辑的 另外,如果您真的关心这些重复文件的文件大小,那么您可以压缩它们。 您的示例甚至暗示了这一点,即 “Hello World”x1000
比实际写1000次“hello world”更节省空间 Marcelos给出了一般性能案例。我认为担心这是过早的优化。您应该将内容拆分为不同的文件,在这些文件中拆分它们是合乎逻辑的 另外,如果您真的关心这些重复文件的文件大小,那么您可以压缩它们。 您的示例甚至暗示了这一点,即 “Hello World”x1000 比实际写1000次“hello world”更节省空间 我认为文件的使用应根据API和用于读/写它们的语言(以及最终的API限制)加以考虑。 磁盘碎片(只有大文件时会减少)会影响数据访问,如果您一次读取一个大文件,则会影响数据访问,而对小文件的多次访问间隔时间不会影响碎片。我认为应该考虑文件的使用,根据API和用于读/写它们的语言(以及最终的API限制)。
磁盘碎片(只有大文件时会减少)将惩罚一次性读取一个大文件的数据访问,而对小文件的多次间隔访问不会惩罚碎片。大多数文件系统以大于一字节的单位分配空间(目前通常为4KB)