【发布时间】:2012-03-22 04:54:27
【问题描述】:
我正在运行一个处理多媒体上传的网站,其主要用途之一。 我想知道在服务器上组织大量用户上传文件的最佳做法或行业标准是什么。
【问题讨论】:
我正在运行一个处理多媒体上传的网站,其主要用途之一。 我想知道在服务器上组织大量用户上传文件的最佳做法或行业标准是什么。
【问题讨论】:
除非您提供更多上下文并描述文件的用例,否则我认为您不会得到任何具体答案。与任何其他技术决策一样,“最佳实践”始终是不同功能和非功能需求之间的折衷方案,因此该问题需要更多上下文来产生您可以采取行动的答案。
话虽如此,以下是一些我认为可行的策略:
1) 使用文件使用者规定的约定。 例如,如果文件将由 CMS/发布解决方案使用,那么该系统可能有一些用于处理文件的标准化解决方案。
2) 使用第三方上传解决方案。有很多工具可以帮助您找到解决特定问题的解决方案。 Transloadit、Zencoder 和 Encoding 等工具都有不同的处理上传选项。查看这些选项应该会让您了解什么可以被视为“行业标准”。
3) 查看经过验证的解决方案,并模仿适合您用例的部分。 有一些开源解决方案可以处理您在此处描述的那种事情。查看不同的插件,例如 paperclip,了解它们如何组织文件,或者更重要的是,它们提供了哪些抽象,可以让您在需求变化时改变主意。
4) 设计您自己的解决方案。 做一个尖峰,这是暴露您没有考虑过的需求的最有效方法之一。尝试集成上述工具之一,看看效果如何。软件是软的,所以没有决定是最终的。也许最好的解决方案就是尝试一些东西,当它不再适合时改变它。
这可能不是您要寻找的具体答案,但就像我在开头提到的那样,设计决策始终是一种权衡,在一种情况下的“最佳实践”可能是另一种情况下最糟糕的解决方案 :)
祝你好运!
【讨论】:
据我了解,您需要有关如何存储文件的建议。如果这是您想要的,我建议您为您的文件使用 2 个不同的存储系统。
第一个存储将是存储物理文件的地方,例如您服务器上的目录(不启用 FTP,浏览器可访问或不可访问,...)或使用 Amazon s3 (aws.amazon.com/en/s3/), Rackspace CloudFiles (www.rackspace.com/cloud/cloud_hosting_products/files/) 或任何其他存储解决方案(如果需要,您甚至可以选择保管箱)。所有这些选项都提供了用于保存/检索文件的 API。
第二个存储将是一个数据库,用于索引和控制文件。在数据库上,可以是 MySQL、MSSQL 或非关系数据库,如 Amazon DynamoDB 或 SimpleSQL,您可以设置文件的链接(http 链接、文件的路径或类似内容)。
此外,在数据库上,您可以控制和存储所需文件的任何元数据,并选择一个或多个@ebaxt 的解决方案来获取它。元数据可以是文件的旧版本、文本文件的文字、图片的相机型号和地理位置等。当然,这取决于您的需求以及如何真正使用它。您有很多选择,但如果没有更多关于您打算做什么的信息,很难向您推荐解决方案。
在亚马逊教程区 (http://aws.amazon.com/articles/Amazon-S3?browse=1) 你可以找到很多关于它的论文,例如 Netflix's Transition to High-Availability Storage Systems、Using the Java Persistence API with Amazon SimpleDB 和 Petboard: An ASP.NET Sample Using Amazon S3 and Amazon SimpleDB
问候。
【讨论】:
您的问题非常广泛,但我假设您在谈论文件的存储/组织/层次结构(而不是平台/基础设施)。
一种典型的组织方法是将文件上传到基于文件名本身的 3 级层次结构。
例如。文件名 = "My_Video_12.mpg"
然后将存储在其中,
/M/Y/_/My_Video_12.mpg
或者另一个例子,“a9usfkj_0001.jpg”
/a/9/u/a9usfkj_0001.jpg
通过这种方式,您最终会得到一个易于管理的结构,可以轻松地根据文件名称定位文件的位置。它还可以确保目录不会增长到巨大的规模并且访问速度会变得异常缓慢。
只是一个想法,但可能值得更明确地说明您的问题实际上是关于什么的。
【讨论】: