如何决定何时在生产中使用mongodb的复制集
我们目前正在使用MongoDB在ec2中的官方docker映像托管MongoDB,对于我们的生产环境,它的32gb内存服务器专用于此服务 使用副本集如何帮助我们提高MongoDB的性能,我们目前面临的问题是,查询响应速度越来越慢如何决定何时在生产中使用mongodb的复制集,mongodb,replication,database-performance,production,replicaset,Mongodb,Replication,Database Performance,Production,Replicaset,我们目前正在使用MongoDB在ec2中的官方docker映像托管MongoDB,对于我们的生产环境,它的32gb内存服务器专用于此服务 使用副本集如何帮助我们提高MongoDB的性能,我们目前面临的问题是,查询响应速度越来越慢 是否有任何措施可以让我们确定,投资复制集也会带来有价值的好处,而且不会过早优化 MongoDB复制是一种高可用性解决方案(有关复制的更多详细信息,请参阅本文末尾的注释)。复制不是一种性能改进解决方案 MongoDB查询性能取决于多种因素:集合大小、文档大小、数据库设计、
是否有任何措施可以让我们确定,投资复制集也会带来有价值的好处,而且不会过早优化 MongoDB复制是一种高可用性解决方案(有关复制的更多详细信息,请参阅本文末尾的注释)。复制不是一种性能改进解决方案 MongoDB查询性能取决于多种因素:集合大小、文档大小、数据库设计、查询定义和索引。硬件(内存、硬盘、cpu和网络)不足会影响查询性能。给定时间的操作数也会影响性能 为了提高查询性能,主要考虑使用索引。索引直接影响查询筛选和排序操作。要查找您的查询是否以最佳方式执行,并使用适当的索引,请使用带有“executionStats”模式的
explain
生成查询计划;研究这个计划。Explain可以在MongoDB查找、更新、删除和聚合查询上运行。所有这些查询都可以从索引中受益。看
向现有硬件添加功能称为垂直扩展;而且复制不是垂直扩展
复制:
这被配置为副本集—一个主节点和多个辅助节点。主应用程序是应用程序的主要联系点—所有写操作都发生在主应用程序上(默认情况下为读操作)。写入主设备的数据将复制到辅助设备。这样就实现了数据冗余。当主设备停机时,其中一个辅助设备将作为主设备接管,并通过故障切换过程保持系统运行。数据持久性、高可用性、冗余和故障切换是复制的主要概念。在MongoDB中,副本集群集最多可以有50个节点。由于HA功能,建议在生产中使用副本集 一方面由于源限制,另一方面由于生产中需要HA,我建议您创建一个最小副本集,该副本集由主副本集、次副本集和仲裁器组成(仲裁器不包含任何数据,并且占用内存非常少) 此外,写操作通常比读操作对内存性能的影响更大。为了获得更好的写入性能,我建议您创建更多的碎片(您拥有的母版越多,您可以同时处理的写入越多) 然而,我不确定是什么情况下你的mongo的性能会减慢这么快。我认为你应该:
祝你好运P副本集用于高可用性。它不是用于缩放的。如果您的查询速度随着数据的增加而变慢,则更有可能出现索引问题。查询正在执行IXSCAN,因此我想这是我们能达到的最佳效果。副本集能否帮助我们将单个mongo节点上的负载分配给其他副本?即使它正在执行IXSCAN,它可能不是最佳索引,因此它仍然会变慢。我建议您打开另一个问题,描述您的查询、索引和查询的explain()输出。是的,我理解,副本集是否可以用于读取查询,例如,通过使用它,我们可以将写入查询转移到主节点,将读取查询转移到副本节点,如果可以这样做,性能是否会提高?您可以为查询指定读取首选项,并且它可以将读取定向到辅助节点。我认为这不是为了查询性能;看。是的,查询性能不会提高,我知道了,但是它能减少主节点上的负载吗?主节点面临大量写操作,这会导致性能操作吗?但是,在辅助节点上也有写操作(复制是写操作)。您通常应该遵循前面注释中的“阅读首选项用例”链接。