由于 MongoDB 3.x 为每条记录而不是集合或数据库引入了锁,因此将所有数据写入具有一个额外标识符字段“documentType”的单个集合是否有意义。它将有助于通过 map-reduce 操作模拟“加入”。Couchbase 使用“buckets”而不是集合做同样的事情。
有人看到这种方法有什么缺点吗?
一般情况下有一个很大的缺点:索引。
使用 Mongo,您通常希望设置索引,以便您进行的大多数(如果不是全部)查询都使用它们。因此,除了 上的一个之外_id,您还将在您搜索的主要字段上设置索引(通常与您排序的字段混合)。
如果您将所有内容都存储在一个集合中,这意味着您需要在该集合上拥有所有这些索引。这意味着两件事:
索引更大,因为要索引的文档更多。当然,这可以通过使用稀疏索引在一定程度上缓解。
在集合中插入或修改文档需要 Mongo 更新所有这些索引(它只更新标准使用多集合方法中的相关索引)。这会扼杀您的写入性能。
此外,如果你在你的应用程序有一个查询,不知怎的,不使用这些众多指标之一,它需要通过整个集合,这是扫描O(n)这里n是集合中文档的数量-在您的情况,这意味着整个数据库中的文档数。
收藏很便宜。使用它们 ;)