2

I'm developing a web platform that may reach some million of users where I need to store users' images and docs. I'm using Rackspace and now I need to define the files logic into cloud files service. Rackspace allows to create up to 500,000 containers with an account (reference page 17, paragraph 4.2.2) and in addition they suggest to limit each container size up to 500,000 objects (reference Best practice - Limit the Number of Objects in Your Container), which is the best practice for users files management?

One container for user don't seems to be a good solution because there is the 500,000 containers limit. Rackspace suggests to use virtual container. I'm a bit undecided how to use them.

Thanks in advance.

4

1 回答 1

1

如果您只通过具有 200,000 个对象的 API 调用与文件进行交互是可以的(根据我的经验,不需要更大的对象)。

如果您想尝试使用 Web 界面来完成任何任务,那么您需要的远不止这些。Web 界面不会按文件夹分解内容,因此如果您有 30,000 个对象,Web 界面只会对它们进行分页并按字母顺序显示给您。这对于包含数百个对象的容器来说是可以的,但除此之外,Web 界面就无法使用。

如果您有数百万用户,您可以使用用户 ID 的某些部分作为分片键来决定使用哪个存储桶。有关选择分片键的信息,请参阅http://docs.mongodb.org/manual/core/sharding-internals/#sharding-internals-shard-keys。它是为 Mongo 用户编写的,但适用于此处。要点是选择一些属性,可以稍微均匀地分配您的用户,这样您就没有一个存储桶超过您希望每个存储桶拥有的最大文件数。

一种方法是使用用户 ID,我们可以根据第一位数字随机分配和分片。在本例中,我们将使用 UID 的 1234、2234、1123 和 2134。假设您想按 UID 的第一个数字分解文件,您可以将 1234 和 1123 的文件保存在容器“files_group_1”中以及“files_group_2”容器中的 2234 和 2134 文件。

在选择分片键之前,请确保您考虑用户可能存储多少文件。例如,如果用户可能存储数百(或数千)个文件,那么您将希望使用比 UID 的第一个数字更唯一的键进行分片。

希望有帮助。

于 2013-02-06T00:28:55.460 回答