在mongodb中哪些操作便宜/昂贵?

Abe*_*Abe 13 mongodb

我正在阅读MongoDB,并试图了解它最适合的地方.我没有看到明确答案的一个问题是哪些操作便宜或昂贵,以及在什么条件下.

你能帮忙澄清一下吗?

谢谢.

Ser*_*sev 7

人们经常声称,mongodb写得非常快.虽然它们确实不慢,但这是一种夸大其词.mongodb中的写吞吐量受全局写锁限制.是的,你说得对,在任何特定时刻服务器上都只能进行一次*写操作.

另外,我建议您利用mongodb的无模式特性并将数据存储为非规范化.通常只有一个磁盘可以获取所有需要的数据(因为它都在同一个文档中).减少磁盘搜索 - 更快的查询.

如果数据位于RAM中 - 根本不需要磁盘搜索,则直接从内存中提供数据.所以,确保你有足够的RAM.

Map/Reduce,group,$ where查询很慢.

写入一个大文档并不快($push例如使用).该文档将超出其磁盘边界,必须复制到另一个地方,这涉及更多的磁盘操作.

我同意@AurelienB,一些基本原则在所有数据库中都是通用的.


更新

*自2011年以来,mongodb的几个主要版本被发布,改进了锁定的情况(从服务器级到数据库级到集合级).引入了一个新的存储引擎WiredTiger,它具有文档级锁.总而言之,2018年写入应该明显加快.


And*_*ich 5

在我的实践中,应该提到的一件事是mongodb不太适合报表,因为在报表中通常需要来自不同集合的数据(“ join ”),而mongodb并没有提供汇总多个集合数据的好方法(并且不应提供)。当然,对于某些报告,map / reduce或增量 map / reduce可以很好地工作,但是这种情况很少见。

对于报告,有人建议将数据迁移到关系数据库中,这有很多用于报告的工具。

  • Mongodb 现在有连接:[$lookup](https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/)。 (2认同)