Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 这种大型monogdb存储是否会导致性能低下?_Performance_Mongodb - Fatal编程技术网

Performance 这种大型monogdb存储是否会导致性能低下?

Performance 这种大型monogdb存储是否会导致性能低下?,performance,mongodb,Performance,Mongodb,我们有一个mongodb,上面有336GB的数据 不幸的是,该服务器上只有8GB内存 这是否真的会降低数据库的速度,特别是当我试图遍历整个集合时 我可以做些什么来提高性能?您应该为集合编制索引以提高性能,但请记住,mongodb在查询索引时会使用内存,因此请确保您创建的每个索引都可以放入服务器上的内存中 你也可以把你的收藏分成碎片,但是你需要更多的服务器来完成 我知道这是很明显的,但是要有更多的内存——它很便宜 Mongodb使用内存映射文件将数据映射到系统虚拟内存中。如果试图访问的数据超过系统

我们有一个mongodb,上面有336GB的数据

不幸的是,该服务器上只有8GB内存

这是否真的会降低数据库的速度,特别是当我试图遍历整个集合时


我可以做些什么来提高性能?

您应该为集合编制索引以提高性能,但请记住,mongodb在查询索引时会使用内存,因此请确保您创建的每个索引都可以放入服务器上的内存中

你也可以把你的收藏分成碎片,但是你需要更多的服务器来完成


我知道这是很明显的,但是要有更多的内存——它很便宜

Mongodb使用内存映射文件将数据映射到系统虚拟内存中。如果试图访问的数据超过系统的可用内存,则性能将很差。您将不得不考虑其他选择,如削切、索引、增加RAM等。索引可以提高性能,但如果在大数据集上完成,则不会太大,因为索引也需要内存。一些参考资料:

前3个问题讨论内存映射文件:

关于分片:


确保索引与RAM相匹配:

为了使事情正确,这不是一个“大”的生产设置;它实际上相对较小

除此之外:

这是否真的会降低数据库的速度,特别是当我试图遍历整个集合时

是真的,是的。当您迭代集合时,MongoDB将需要在您的数据中分页,即使集合上有索引,这也是正确的

例外情况是,当您使用
索引
游标时,所有数据仅来自索引,包括返回的文档;这些查询也称为覆盖查询

这里的问题是,假设允许您使用所有RAM,那么您的数据集比RAM数量大42倍(当然,这不是真的,操作系统和其他程序将为自己保留数量)。这意味着,如果您希望迭代整个集合,您将无法执行它,相反,MongoDB可能会对其分配的内存进行页面震荡

我可以做些什么来提高性能

再多一点内存

如果在一台服务器上获得太多的RAM是一件痛苦的事,您也可以尝试一点分片


我的目标是比RAM多20倍的数据,这在大多数情况下应该不会太糟糕。

其他答案说“有足够的内存来容纳数据”或“每个索引有足够的内存”或“数据中有一些RAM的倍数”。对于容量规划而言,这些都不是非常有效,也不是非常精确

您需要知道您的访问模式是什么,然后决定需要什么索引才能有效地使用数据。如果您的所有索引都适合可用的RAM,并且有一些空间可以用来存放最近接触过的文档,那么您应该没问题

当您的工作集(访问的数据+索引)无法装入RAM时,您的性能将更多地与磁盘访问速度相关。根据磁盘的速度以及吞吐量和延迟要求,它可能正常工作,也可能不正常


虽然没有足够的信息可以确定您在这台特定的机器上是否会成功或失败,但您应该能够收集足够的信息,通过分析索引需求等来确定这一点。

mmap映射到虚拟内存,而不是rami如果您已经拥有数据库和服务器,与性能要求相比,您是否在查询中尝试过它?最好的答案是在尝试任何特殊的“常规”优化之前先尝试一下,看看它是否满足您的需要。
在大多数情况下,这应该不会太糟糕,但对Crossor不好,对吧?@jackalope it dpeens完全取决于您对MongoDB的期望以及您期望的响应时间,操作系统应该能够在没有太多抖动的情况下翻页20次,虽然不会太快,但在正常情况下,这是可以接受的。好的,我会做更多的研究。