我正在阅读MongoDB,并试图了解它最适合的地方。我没有看到明确答案的一个问题是哪些操作便宜或昂贵,以及在什么条件下。
你能帮忙澄清一下吗?
谢谢。
我正在阅读MongoDB,并试图了解它最适合的地方。我没有看到明确答案的一个问题是哪些操作便宜或昂贵,以及在什么条件下。
你能帮忙澄清一下吗?
谢谢。
人们经常声称,mongodb写得非常快。虽然它们确实不慢,但这是一种夸大其词。 mongodb中的写吞吐量受全局写锁限制。是的,你说得对,只有 一* 在任何给定时刻在服务器上发生写操作。
另外,我建议你利用mongodb的无模式特性并将数据存储为非规范化。通常只有一个磁盘可以获取所有需要的数据(因为它都在同一个文档中)。减少磁盘搜索 - 更快的查询。
如果数据位于RAM中 - 根本不需要磁盘搜索,则直接从内存中提供数据。所以,确保你有足够的RAM。
的Map / Reduce, 组, $哪里 查询很慢。
写一篇大文件并不快(使用 $push
, 例如)。该文档将超出其磁盘边界,必须复制到另一个地方,这涉及更多的磁盘操作。
我同意@AurelienB,一些基本原则在所有数据库中都是通用的。
*自2011年以来,mongodb的几个主要版本被发布,改进了锁定的情况(从服务器级到数据库级到集合级)。引入了一个新的存储引擎WiredTiger,它具有文档级锁。总而言之,2018年的写作现在应该明显加快。
人们经常声称,mongodb写得非常快。虽然它们确实不慢,但这是一种夸大其词。 mongodb中的写吞吐量受全局写锁限制。是的,你说得对,只有 一* 在任何给定时刻在服务器上发生写操作。
另外,我建议你利用mongodb的无模式特性并将数据存储为非规范化。通常只有一个磁盘可以获取所有需要的数据(因为它都在同一个文档中)。减少磁盘搜索 - 更快的查询。
如果数据位于RAM中 - 根本不需要磁盘搜索,则直接从内存中提供数据。所以,确保你有足够的RAM。
的Map / Reduce, 组, $哪里 查询很慢。
写一篇大文件并不快(使用 $push
, 例如)。该文档将超出其磁盘边界,必须复制到另一个地方,这涉及更多的磁盘操作。
我同意@AurelienB,一些基本原则在所有数据库中都是通用的。
*自2011年以来,mongodb的几个主要版本被发布,改进了锁定的情况(从服务器级到数据库级到集合级)。引入了一个新的存储引擎WiredTiger,它具有文档级锁。总而言之,2018年的写作现在应该明显加快。
根据我的实践,应该提到的一件事是,mongodb不太适合报告,因为通常在报告中你需要来自不同馆藏的数据('加入')和mongodb没有提供聚合数据的好方法多个集合(并且不应该提供)。对于某些报告肯定是map / reduce或 增加的 map / reduce可以很好地工作,但很少见。
对于报告,有些人建议将数据迁移到关系数据库中,这些数据库有很多报告工具。
这与所有数据库系统没有太大区别。
对索引数据的查询很快。对很多数据的查询都很慢。 由于非规范化,如果没有索引,在基础上写入会很快,这就是为什么日志记录是基本用例的原因。
相反,当你有数十亿的文档时,读取没有索引的磁盘(不在RAM中)的数据可能会非常慢。