前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >优化MongoDB的4个技巧

优化MongoDB的4个技巧

作者头像
February
发布于 2018-12-03 08:07:44
发布于 2018-12-03 08:07:44
1.3K0
举报
文章被收录于专栏:技术翻译技术翻译

在本文中,我们将介绍四种快速优化MongoDB的方法。

你有没有MongoDB数据库的性能问题?常见的情况是运行查询时突然出现性能问题。显而易见的第一个解决方案是,“让我们创建一个索引!” 虽然这在某些情况下有效,但在尝试优化MongoDB时还需要考虑其他选项。

性能不是因为拥有非常昂贵的磁盘和千兆网络的大型机器。事实上,这些并不一定是良好表现的关键。

MongoDB性能来自良好的概念,组织和数据分发。我们将列出一些良好的MongoDB优化的最佳实践。这不是一个详尽或完整的指南,因为有许多变量。但这是一个好的开始。

1.保持文件简单

MongoDB是一个无架构的数据库。这意味着默认情况下没有预定义的架构。我们可以在较新的版本中添加预定义的架构,但它不是必需的。请注意使用嵌入式文档和数组时遇到的困难,因为在应用程序端/ ETL过程中解析数据会变得非常复杂。此外,数组可能会损害复制性能:对于数组中的每个更改,都会复制所有数组值!

在MMAPv1中,选择正确的字段名称非常重要,因为数据库需要保存每个文档的字段名称。这与在关系数据库中保存模式不同。让我们想象一下 ,如果你有一百万个文件,一个名为lastmessage的字段从传感器中获取的数据花费你多少:大约28 MB只是为了保存这个字段名称!十个字段的集合将需要280MB(仅用于保存空文档)。

几乎达到此文档大小的文档是不可取的,因为数据库需要大量页面才能处理单个文档。这需要更多的CPU周期来完成任何操作。

2.硬件很重要,但......

使用具有多个处理器和大量内存的良好硬件肯定有助于获得良好的性能。

WiredTiger利用多个处理器来提供良好的性能。此存储引擎具有按文档锁定算法,因此可以同时运行尽可能多的处理器和尽可能多的操作(存在票证限制,但这超出了本文的范围)。但是,MMAPv1存储引擎必须锁定每个集合,有时无法利用多个处理器进行写入。

但是当一个实例死亡时,在有三台大机器(32个CPU,128个RAM和2TB磁盘)的环境中会发生什么?答案是它将进行故障转移 - 并且驱动程序足够智能以读取运行状况实例并编写新主数据库。但是,您的表现将不尽相同。

这并非总是如此,但在分布式环境中拥有多台小型/中型机器可以确保中断仅影响分片的几个部分,而应用程序很少或根本没有感知。但与此同时,更多的机器很有可能发生故障。在设计环境时考虑这种权衡。正确的选择会影响性能。

3.阅读Preference和writeConcern

read preference和writeConcern根据公司的要求而有所不同。但请记住,新的MongoDB版本(3.6)使用writeConcern:“ most readConcern:“primary”

这意味着它必须确认至少楼层((N / 0.5)+1)的所有写入,其中N是副本集中的实例数。这可能很慢。然而,这对于速度的一致性是公平的权衡。

请确保您使用最合适的阅读偏好并在您的公司中写下问题。驱动程序始终从主数据库读取,但如果它不是您的环境的要求,请考虑在其他实例之间分发查询。如果不这样做,则实例仅用于故障转移,不会在常规操作中使用。

4.工作集

工作集有多大?通常,应用程序不使用所有数据。有些数据经常更新,而其他数据则没有。

您的工作数据集是否适合RAM?当所有工作数据集都在RAM中时,会出现最佳性能。像页面错误一样,Wome的慢度可能会影响性能,具体取决于您使用的内容。

读取(例如备份,ETL或初级报告)可能会严重影响性能,因为存在缓存中页面的竞争。大型报告或聚合也是如此。 将多个集合用于多种用途并将特定机器用于特定目的(例如使用区域来保存将不再使用的文档)将有助于实现简单和预期的工作集。

希望你发现这篇关于如何优化MongoDB的文章很有帮助。

原文标题《4 Tips to Optimize MongoDB》

作者:Adamo Tonete

译者:February

不代表云加社区观点,更多详情请查看原文链接

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用模式进行构建——预分配模式
MongoDB最明显的优势之一就是文档数据模型。它在模式设计和开发周期中均提供了很大的灵活性。用MongoDB文档可以很容易地处理那些不知道之后会需要哪些字段的场景。然而,有些时候当结构是已知的,并且能够被填充或扩充时,会使设计简单得多。这就是我们可以使用预分配模式的地方。
MongoDB中文社区
2019/05/24
8300
常见问题: MongoDB 存储
存储引擎是数据库的一部分,负责管理如何在内存和磁盘上存储数据。许多数据库支持多个存储引擎,其中不同的引擎对特定工作负载的性能会更好。例如,一个存储引擎可能为读取繁重的工作负载提供更好的性能,另一个可能支持更高的写入操作吞吐量。
MongoDB中文社区
2019/06/11
2.6K0
常见问题: MongoDB 存储
云测评-MongoDB存储引擎谁更强
导读:本文作者是来自Percona的支持工程师 Vinodh Krishnaswamy 和 Aayushi Mangal。这篇文章主要介绍了MongoDB中两个引擎之间的差异,并在文章结尾处给出了表格对比总结。全文约2050字,阅读需要5分钟。
磊哥测评
2019/03/29
2.3K0
云测评-MongoDB存储引擎谁更强
MongoDB系列7:MongoDB存储引擎
1、前言 存储引擎是数据库的组成部分,负责管理数据存储。 MongoDB支持的以下存储引擎: 存储引擎描述WiredTiger存储引擎从MongoDB 3.2开始默认的存储引擎,新的版本MongoDB推荐使用WiredTiger存储引擎。MMAPv1存储引擎MMAPv1是MongoDB 3.2之前版本默认的存储引擎。In-Memory存储引擎MongoDB企业版支持In-Memory存储引擎。 表 2、WiredTiger存储引擎 从MongoDB 3.2开始,MongoDB默认的存储引擎为WiredTig
大数据和云计算技术
2018/03/30
2.4K0
MongoDB系列7:MongoDB存储引擎
云测评 | MongoDB两代引擎谁更强?
本文作者是来自Percona的支持工程师 Vinodh Krishnaswamy 和 Aayushi Mangal。主要介绍了MongoDB中两个引擎之间的差异,并在文章结尾处给出了表格对比总结。文章由腾讯云数据库团队翻译整理,全文约2050字,阅读需要5分钟。 ---- 在这篇文章中,我们将了解到MongoDB中MMAP和WiredTiger引擎之间的差异。很多客户都咨询过这两个引擎的问题,这篇文章将为你们解决难题。我们将告诉您这些引擎的主要特性,您可以根据自己的需求选择合适的引擎。 在MongoDB中
腾讯云数据库 TencentDB
2019/05/16
1.7K0
云测评 | MongoDB两代引擎谁更强?
MongoDB 介绍
郭顺发
2023/07/17
1520
MongoDB 存储引擎
上次我们说到了关于 mongodb 的集群,分为主从集群和分片集群,对于分片集群中的分片这里需要注意如下几点,一起来回顾一下:
阿兵云原生
2023/02/16
6110
MongoDB数据存储-深入了解
最近运维中时常涉及到MongoDB的维护工作,今天详细梳理下MongoDB数据存储方面的内容。首先需要深入了解的一个概念:Memeory-Mapped Files 通过上图可以看出MongoDB数据库
洗尽了浮华
2018/01/23
5.5K0
MongoDB数据存储-深入了解
【翻译】MongoDB指南/引言
【原文地址】https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来
甜橙很酸
2018/03/08
4.5K0
【翻译】MongoDB指南/引言
MongoDB 初体验:存储引擎 MMAPv1 与高内存消耗及升级迁移
当我对公司的一个内部系统性能无可忍受时,意外发现在这个内存仅为 32G 的服务器上,运行着一个 MongoDB 数据库,其主进程 mongod 占用了 30.705 G的虚拟内存空间。这立刻引起了我的兴趣,必须要研究一下其工作原理。
数据和云
2018/07/27
1.7K0
MongoDB 初体验:存储引擎 MMAPv1 与高内存消耗及升级迁移
MongoDB技术架构详解
MongoDB是一个面向文档的数据库,它以BSON(Binary JSON)格式存储数据。与关系型数据库不同,MongoDB没有固定的表结构,允许存储不同结构和类型的数据。这使得MongoDB非常适合处理半结构化和非结构化数据,如日志、社交媒体数据等。
公众号:码到三十五
2024/03/19
1.6K0
MongoDB技术架构详解
MongoDB3.2 存储策略
本文是MongoDB存储策略的一个简单翻译加讲解,存储引擎部分只介绍 wiredTiger,只有企业版支持的inMemory和落后于wiredTiger的mmapv1你可以参考官方文档。 官方给出存储策略如下:
李振
2021/11/26
7000
MongoDB3.2 存储策略
常见问题:MongoDB诊断
·为什么MongoDB会记录这么多“Connection Accepted”事件?
MongoDB中文社区
2019/06/24
1.1K0
MongoDB-4.0 使用注意事项
新建的MongoDB服务是无认证模式,即不需要用户名和密码就可以登录数据库。在有更好的认证方式(LDAP)前,用户名/密码是基本的认证方式。保持MongoDB服务的更新,并持续关注日志中是否有未经授权访问的迹象。
cosmozhu
2020/06/15
6860
常见问题:并发
MongoDB允许多个客户端读取和写入相同的数据。为了确保一致性,它使用锁定和其他并发控制措施来防止多个客户端同时修改同一条数据。总之,这些机制保证对单个文档的所有写入完全或根本不发生,并且客户端永远不会看到数据的不一致视图。
MongoDB中文社区
2019/05/15
1.6K0
常见问题:并发
mongodb-4.x复制集数据同步(replica-set-sync)
为了维护共享复制集的最新节点,复制集的次要成员节点将同步或复写其他成员节点的数据。MongoDB用了两种方式做数据同步:用全量数据初始化节点,用增量数据复写到节点。
cosmozhu
2020/06/15
1K0
mongodb配置文件详解,内存限制,用户验证 yaml格式
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
拓荒者
2019/09/19
2.6K0
【赵渝强老师】MongoDB的MMAPv1存储引擎
在MongoDB 3.2版本以前,MongoDB使用MMAPv1作为默认的存储引擎。在MMAPv1的存储引擎中,包含以下的组成部分:
赵渝强老师
2024/08/31
1300
【赵渝强老师】MongoDB的MMAPv1存储引擎
常见问题:索引
本文档解决了有关MongoDB 索引的一些常见问题 。有关索引的更多信息,请参阅 索引。
MongoDB中文社区
2019/05/15
8570
常见问题:索引
时间序列数据和MongoDB:第二部分 - 架构设计最佳实践
之前的文章“ 时间序列数据和MongoDB:第一部分 - 简介 ”中,介绍了时间序列数据的概念,然后介绍了一些常见问题,可用于帮助收集时间序列应用程序。这些问题的答案有助于指导支持大批量生产应用程序部署所需的架构和 MongoDB 数据库配置。现在,我们将重点介绍两种不同的模式设计如何影响读取,写入,更新和删除操作下的内存和磁盘利用率。
MongoDB中文社区
2019/04/22
2.4K0
时间序列数据和MongoDB:第二部分 - 架构设计最佳实践
相关推荐
利用模式进行构建——预分配模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档