Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
如何决定何时在生产中使用mongodb的复制集_Mongodb_Replication_Database Performance_Production_Replicaset - Fatal编程技术网

如何决定何时在生产中使用mongodb的复制集

如何决定何时在生产中使用mongodb的复制集,mongodb,replication,database-performance,production,replicaset,Mongodb,Replication,Database Performance,Production,Replicaset,我们目前正在使用MongoDB在ec2中的官方docker映像托管MongoDB,对于我们的生产环境,它的32gb内存服务器专用于此服务 使用副本集如何帮助我们提高MongoDB的性能,我们目前面临的问题是,查询响应速度越来越慢 是否有任何措施可以让我们确定,投资复制集也会带来有价值的好处,而且不会过早优化 MongoDB复制是一种高可用性解决方案(有关复制的更多详细信息,请参阅本文末尾的注释)。复制不是一种性能改进解决方案 MongoDB查询性能取决于多种因素:集合大小、文档大小、数据库设计、

我们目前正在使用MongoDB在ec2中的官方docker映像托管MongoDB,对于我们的生产环境,它的32gb内存服务器专用于此服务

使用副本集如何帮助我们提高MongoDB的性能,我们目前面临的问题是,查询响应速度越来越慢


是否有任何措施可以让我们确定,投资复制集也会带来有价值的好处,而且不会过早优化

MongoDB复制是一种高可用性解决方案(有关复制的更多详细信息,请参阅本文末尾的注释)。复制不是一种性能改进解决方案

MongoDB查询性能取决于多种因素:集合大小、文档大小、数据库设计、查询定义和索引。硬件(内存、硬盘、cpu和网络)不足会影响查询性能。给定时间的操作数也会影响性能

为了提高查询性能,主要考虑使用索引。索引直接影响查询筛选和排序操作。要查找您的查询是否以最佳方式执行,并使用适当的索引,请使用带有“executionStats”模式的
explain
生成查询计划;研究这个计划。Explain可以在MongoDB查找、更新、删除和聚合查询上运行。所有这些查询都可以从索引中受益。看

向现有硬件添加功能称为垂直扩展;而且复制不是垂直扩展


复制:


这被配置为副本集—一个主节点和多个辅助节点。主应用程序是应用程序的主要联系点—所有写操作都发生在主应用程序上(默认情况下为读操作)。写入主设备的数据将复制到辅助设备。这样就实现了数据冗余。当主设备停机时,其中一个辅助设备将作为主设备接管,并通过故障切换过程保持系统运行。数据持久性、高可用性、冗余和故障切换是复制的主要概念。在MongoDB中,副本集群集最多可以有50个节点。

由于HA功能,建议在生产中使用副本集

一方面由于源限制,另一方面由于生产中需要HA,我建议您创建一个最小副本集,该副本集由主副本集、次副本集和仲裁器组成(仲裁器不包含任何数据,并且占用内存非常少)

此外,写操作通常比读操作对内存性能的影响更大。为了获得更好的写入性能,我建议您创建更多的碎片(您拥有的母版越多,您可以同时处理的写入越多)

然而,我不确定是什么情况下你的mongo的性能会减慢这么快。我认为你应该:

  • 检查对产品性能影响最大的是什么(复杂的查询或硬写)
  • 将您的阅读首选项更改为“最近”
  • 考虑禁用读关注点“多数”(请记住,默认情况下存在写关注点“多数”。成员应该是最新的)
  • 检查是否有更好的索引
  • 并创建一个副本集
    祝你好运P

    副本集用于高可用性。它不是用于缩放的。如果您的查询速度随着数据的增加而变慢,则更有可能出现索引问题。查询正在执行IXSCAN,因此我想这是我们能达到的最佳效果。副本集能否帮助我们将单个mongo节点上的负载分配给其他副本?即使它正在执行IXSCAN,它可能不是最佳索引,因此它仍然会变慢。我建议您打开另一个问题,描述您的查询、索引和查询的explain()输出。是的,我理解,副本集是否可以用于读取查询,例如,通过使用它,我们可以将写入查询转移到主节点,将读取查询转移到副本节点,如果可以这样做,性能是否会提高?您可以为查询指定读取首选项,并且它可以将读取定向到辅助节点。我认为这不是为了查询性能;看。是的,查询性能不会提高,我知道了,但是它能减少主节点上的负载吗?主节点面临大量写操作,这会导致性能操作吗?但是,在辅助节点上也有写操作(复制是写操作)。您通常应该遵循前面注释中的“阅读首选项用例”链接。