聪明人,菜鸟在此!
我计划在 s3 上构建一个用于照片/对象存储的多用户设备,并且计划使用 s3。我已经规划好了整个前端,但我对存储桶系统有一个疑问。
我应该用一个存储桶来容纳每个用户吗?还是应该用 4-5 个存储桶来将用户分布在这些存储桶中,或者我应该为每个用户提供一个存储桶?
举个例子,每个用户平均存储大约 35 GB,我希望它能够顺利运行,从 3 个用户到 300,000,000 个用户(尽可能具有可扩展性)
我应该选择哪种方法?Dropbox 在 S3 时代做了什么?
答案1
您绝对不需要为每个用户都创建一个存储桶。AWS 支持人员不太可能批准将您账户的默认总存储桶限制从 100 增加到 300,000,000 的请求,这一点无需担心。此外,初始存储桶创建并非旨在积极或实时地完成。
Amazon S3 的高可用性工程专注于获取、放置、列出和删除操作。由于存储桶操作针对集中式全局资源空间,因此在应用程序的高可用性代码路径上创建或删除存储桶并不合适。最好在不经常运行的单独初始化或设置例程中创建或删除存储桶。
http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
设计应用程序时,无论使用一个存储桶还是多个存储桶都无关紧要。怎么做?对于每个用户,将 bucket_id 存储在存储该用户数据的位置。然后从 bucket_id 1 中的每个人开始,然后您可以灵活地将新用户放入新存储桶(如果有必要的话)...或者如果您决定将某些用户迁移到不同的存储桶...或者如果您决定将用户的存储放在更靠近用户典型位置的存储桶中。
S3 将自动扩展其容量以满足您的流量需求。您可以通过设计对象的路径来简化该过程,以便在键的左侧附近无序地分配对象键。
S3 通过拆分索引分区来扩展其容量,因此,例如,为每个对象提供一个以上传日期开头的路径是一个非常糟糕的主意,因为您的存储桶索引会在键空间的一小部分中因大量上传而形成热点。
看http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html
出于同样的原因,不要为某个区域内的存储桶赋予按词汇顺序排列的名称。
Dropbox 所做的事情可能与此无关。