截至今天(2019年5月),基于WiredTiger(MongoDB 4.0)引擎的MongoDB数据库中的集合数的确切限制是多少?

时间:2019-05-15 04:52:13

标签: mongodb wiredtiger

我正在尝试在MongoDB 4.0数据库中放置一个类似论坛的结构,该结构在同一个“主题”下包含多个线程,每个线程包含一堆帖子。因此,通常,线程和帖子的数量没有限制。而且,我想尝试充分利用NoSQL功能的优点,一次获取任何特定线程下的帖子列表,而不必以传统方式扫描和查找RDBMS表中相同的“ thread_id”和“ post_id” ,因此在我看来,我想将所有线程作为集合放入数据库中,将thread_id用作代码生成的集合名称,并将线程的所有帖子作为普通文档置于该集合下,以便访问帖子可能看起来像:

forum_db【database name】.thread_id【collection name】.post_id【document ID】

但我的担心是,尽管https://docs.mongodb.com/manual/reference/limits/#data上的短语含糊不清,  

 Number of Collections in a Database

Changed in version 3.0. For the MMAPv1 storage engine, the maximum number of collections in a database is a function of the size of the namespace file and the number of indexes of collections in the database. The WiredTiger storage engine is not subject to this limitation.</pre>

以这种方式在性能和可伸缩性方面是否安全?我们可以放心地认为,如今WiredTiger数据库(MongoDB 4.0+)中的集合数量没有限制,因为集合中的文档数量实际上没有限制吗?预先非常感谢。

1 个答案:

答案 0 :(得分:0)

要计算一个MongoDB数据库中可以存储多少个集合,您需要计算每个集合中的索引数。

WiredTiger引擎为每个使用的集合(及其索引)保留一个打开的文件处理程序。大量打开的文件处理程序会导致非常长的checkpoints操作。

此外,每个句柄将在WT缓存之外占用约22KB的内存;这意味着,为了保持文件打开状态, mongod 进程将需要〜 NUM_OF_FILE_HANDLES * 22KB RAM。

高内存交换将导致性能下降。

您可能从以上内容中了解到,不同的硬件(RAM大小和磁盘速度)的行为将有所不同。

从我的角度来看,您首先需要了解应用程序的行为,然后为MongoDB数据库服务器计算所需的硬件。