如果你使用Swift 你会发现上传的文件最大不能超过5GB,其实如果你使用一些类似网盘的云存储服务,你就会发现它们的限制会更加的严格,你或许只会被允许上传100M的文件,这是因为你不可能满足“用户所有的需求”,当然Swift这样限制一定不会是因为这个原因,下面是Swift其中的以为编写着,对这个特性的解释:
每一个对象的上传是一个文件(加上许多副本)在一个文件系统在某一时刻。大于5G(甚至5G跟小的集群)能引起存储分布的不平衡。想象一下你有三个副本在拥有10个驱动器的集群中,所有都处在最佳平衡下,然后你上传了一个100G的对象。现在你将有3个驱动器有比其他驱动器多100G.这是2T的5%。
现在,如果你使用的所有文件都是100G,那么这不再有什么麻烦,随着时间的过去,所有的都会平衡,但是通常大对象没有小对象普遍,因此会导致在分布存储的时候“块化”。当然有方法来解决这个,一种方式是自动的分割对象为一个合适的大小,但是你增加了复杂性,这增加的复杂性跟踪所有的那些分割块确保覆写清除旧的分割块。
当起初编写Swift,我们尽我们所能来保证代码的简单来保持“核心技术”尽可能的无缺陷和可靠。
在这种特殊情况下,在客户端分割大对象文件应该是非常简单的。此外,这样的分割方式允许你并行的上传一些片段,通过在你的集群中一次使用更多的驱动器来增强了速度。
系统的特性总是由具体的需求而得来,只有不断的熟悉系统,熟悉需求,才能完善系统,达到最佳的性能要求。