我正在尝试在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+)中的集合数量没有限制,因为集合中的文档数量实际上没有限制吗?预先非常感谢。
答案 0 :(得分:0)
要计算一个MongoDB数据库中可以存储多少个集合,您需要计算每个集合中的索引数。
WiredTiger引擎为每个使用的集合(及其索引)保留一个打开的文件处理程序。大量打开的文件处理程序会导致非常长的checkpoints操作。
此外,每个句柄将在WT缓存之外占用约22KB的内存;这意味着,为了保持文件打开状态, mongod 进程将需要〜 NUM_OF_FILE_HANDLES * 22KB RAM。
高内存交换将导致性能下降。
您可能从以上内容中了解到,不同的硬件(RAM大小和磁盘速度)的行为将有所不同。
从我的角度来看,您首先需要了解应用程序的行为,然后为MongoDB数据库服务器计算所需的硬件。