用于多租户的MongoDB“手动分片”

时间:2014-01-24 09:28:32

标签: mongodb multi-tenant saas

我们正在使用Mongo来托管多租户应用程序。每个租户都将拥有自己的数据库。为了解决资源利用问题,我们采取的方法是按数据库进行分片(而不是通过集合 - 如果这是正确的术语)。

这意味着对于每个x租户,我们将创建一个新的3节点副本集。因此,我们可能在一个碎片上有1000个租户,在另一个碎片上有另外1000个租户。

我的问题是关于新注册的数据库的位置。我们要采取的方法是将分片标记为“活动”分片并在该分片上创建所有新租户。当它达到容量时,创建一个新的分片,将其标记为活动分片并继续。

您可以直接在Mongo中选择创建新数据库的分片吗?如果留给Mongo,根据我的理解,它会以循环方式进行,当有多个碎片可能会使我们的碎片失衡。

这是正确的方法还是有其他更好的方法?

1 个答案:

答案 0 :(得分:1)

您可以使用shard tags强制某些集合仅驻留在特定分片上。例如,您可以使用其序列号标记每个分片,并使用该标记标记您希望在该分片上具有的集合/数据库,直到它运行完全为止您创建新分片,增加计数器和使用对于新数据。

另一个选择是根本不对各个数据库启用分片,并使用movePrimary命令强制特定分片充当特定数据库的主分片。由于数据库不会被分片,因此其所有数据都将保留在其指定的主分片上,这正是您想要的。

话虽如此,在我看来,这种方法与分片的概念相冲突,分片的意思是自动在多台机器上均匀分布数据。