MongoDB - 我可以自动对所有新数据库(由应用程序创建)进行分片吗?

时间:2016-01-04 16:50:17

标签: mongodb

我的团队将部署我们的应用程序的新版本(捕获社交媒体帖子,主题标签等),他们为每个用户创建一个不同的数据库,我们可能在每个数据库上有数千个集合。我阅读了所有mongoDB分片文档,我发现我只能在一个集合或一个数据库中删除,我错过了什么?

我们将在没有任何数据库的情况下重新开始这个新版本,我们将再次从0增长(目前我们有23k用户)但我们会很快升级这个数字(年底为100.000+)

我的问题是:我真的需要一个碎片群集吗? (我的测试设置有3个分片,3个微型分片,3个配置服务器和2个mongos)现在,在生产中,我有一个大型服务器做所有的努力,但我不想扩展到顶部,水平刻度是最好的选择,我想。

我可以自动对所有数据库进行分片,或者我真的需要逐个进行分片密钥过程。 ?

提前致谢

1 个答案:

答案 0 :(得分:1)

您正在阅读。你打算做的事情远非任何明智的人所做的那样,MongoDB并没有提供任何工具来支持这一点。如果您真的想使用此WTF解决方案,您的应用程序将负责为其创建的每个集合设置分片。这会强制您为应用程序授予管理权限(尽管有任何安全指南建议)。

"您真的需要一个分片群集" - 这取决于您将拥有多少数据以及您使用何种查询查询它的频率。但它无论如何都不可能工作,因为你的分片集群必须管理(100,000个数据库* 1.000个集合)=一亿个集合。 MongoDB不适用于 方向的缩放。群集可能会非常忙于记账,以至于您不会真正看到任何显着的性能提升。

如果聚类在理论上甚至是有意义的,那也是值得怀疑的。群集通常仅在您拥有非常大的集合时才有用。但是在您的数据如此严重碎片化为一百万个集合的情况下,每个单独的集合不太可能非常大。

如果您真的想要走这条路线,实际上可能是通过将每个用户分配到数据库服务器来物理分离数据库的更好解决方案。

或者您可以像普通团队一样构建一个数据库架构,为所有用户提供一个数据库,为每种类型的文档提供一个集合。然后,您可以通过在用户上创建复合索引以及用于指示文档所属的数据库的任何条件来加速查找。此索引可能也是一个很好的分片键。