排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
MONGODB 奇怪12问 switch over
MONGODB 奇怪12问 switch over
AustinDatabases
2023-03-20
473
开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql
,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。
加群请联系 liuaustin3 ,在新加的朋友会分到2群(共600人左右 1 + 2)。
最近我们公司的 REDIS DBA 和 MONGODB DBA 在SWITCH OVER, 我提出了一些问题关于MONGODB 的问题,来让两个DBA 能更快的融合对方的知识。
下面有12 个关于MONGODB 的问题,咱们来看看这些问题以及一些在此时此刻我认为正确的答案
1 Mongodb 众多的版本中,划时代的版本是那个?
实际上这个问题是一个比较难回答的问题,我可以说 5.0 我也可以说 6.0,但这里我给出的答案是 3.2 因为在MONGODB 3.2 wiredTiger 引擎作为MONGODB 的默认引擎推出,而不再是MMAPV1,这段对于MOGNODB 是十分重要的,重要性和MYSQL 从 MYSIAM 到 INNODB 的 意义一样重要。
2 MONGODB 运行当中,如果开发抱怨说写入的数据经常无法读取到,他们希望的是,写入即刻读取,那么你有什么办法?
这里能想到的方案有两个
1 让数据写入的时候,确认写入的节点,如当前有3个节点,则需要 writeconcern 的节点数是 3 ,这样,在进行读取并且通过 secondary preferred 去读取的情况下,是可以读取到数据的。在MOGNODB 4.2后我们可以使用 majority committed 的方式来解决这个问题。
2 设置连接为 primary preferred 也就是写入和读取都会在主节点进行相关的操作,这里就不会出现读不出数据的问题了。
那么这里两个方案都会有各自的问题, 1 方案整体的写入延迟会较高,各个节点的写入压力会升高,2 方案 主节点的压力会变高
当然还有软件的解决方案,这里就不在啰嗦了。
3 问题,目前我有两个从节点,但是一个从节点由于某些原因导致延迟严重,那么我还是要使用 secondary prefer 是否可以避免读取这个延迟的严重的节点 ?
这个问题的解决方案可以从mongodb 3.4 后的在客户使用 secondary , secondaryPreferred 中实现,在连接串中使用
maxStalenessSeconds 来指定当客户读取的从库与主库之间的数据差距太大(时间)的情况下,将不会选择这个从库来进行读取数据。但这里需要指明的,这个值不能太小需要在90秒以上,避免由于时间设置太短导致的问题。
4 MONGODB 在复制集中常用的索引类型有那些?
MONGODB 中主要的索引类型主要有以下几种
1 单字段索引
2 复合索引
3 多键索引
4 文本索引
6 通配符索引
7 唯一索引
8 隐藏索引
而在这些索引中还会有其他的组织形式,如sparse 索引,我们可以称之为稀疏索引。TTL 索引,部分索引,不区分大小写的索引 等等 这些索引在使用上的功能的划分。
5 如何判断一个MONGODB 的INDEX 是从来没有使用的?
通过
db.collation_name
.aggregate([{$indexStats: {}}]) 中的 ops 中的信息来获取时间和次数
6 Mongodb 是否可以和其他的应用一起安装,或者多个MOGNODB 的实例进行在同一个物理机上进行安装 ?
不建议这样使用,主要的原因是MOGNODB 是使用内存映射存储的引擎,将IO 操作转换为内存的处理操作,一般MONGODB 的早期版本在内存释放方面是有问题的,所以我们不建议在一些较低版本如 5.0以下的版本去在一个物理机安装多个实例,避免互相因为内存的问题引出的资源争抢导致的问题。
7 MongoDB 怎么判断内存不足或内存需要进行添加的问题 ?
MONGODB 的数据是压缩应存储到磁盘上的,所以数据需要缓冲到LINUX 的系统缓冲CACHE 中,加速文件的解压和获取。所以不能用传统的数据库内存的管理方式来看MONGODB 的缓存设置
除此之外, mongodb 在除了以上内存的使用以外,还有一些内存的使用
1 在数据库操作commit 的操作时,数据并不是立即刷到磁盘中,而是有对应的缓冲来在脏页刷新到磁盘前,进行数据的缓冲
2 mongodb 是一个支持MVCC 的多版本控制的数据库,所以在操作时,数据行的多个版本是要存储在内存中的
3 客户的连接,以及聚合操作等内存的消耗
所以内存到底够不够用,这里通过db.serverStatus().wiredTiger.cache 命令捕获下面的一些数据,可以来判断内存的使用情况
wiredTiger.cache.tracked dirty bytes in the cache
这个值是脏数据驻留在wiredTiger cacheSize 里面的脏数据大小,如果这个值对比wiredTiger cacheSize 的设置的内存值 超过 5%的容量,同时通过工具 mongostat持续观察其中的指标dirty如果此时你的dirty持续在20%,会得出两个可能
1 你的磁盘系统不能满足当前的业务在MONGODB中的使用
2 你的内存有必要进行添加了
同时也可以通过 db.serverStatus().wiredTiger.concurrentTransactions 来看数据写入时是否有内存缺少的可能,注意available 的值的变化、
除此以外还可以通过
db.serverStatus().wiredTiger.cache['pages requested from the cache']
db.serverStatus().wiredTiger.cache['pages read into cache']
我们以 2秒为一个取数点,将 page requested from the cache 的值减去上一个 2秒的值,作为一个增量,通过针对 page read into cache 也是一样的处理方式。然后将第一个值 第二个值 * 100 = buffer cache hit ratio
来查看当前数据在cache 中的命中率。
8 Mongodb 如果选择进行分片的方式进行数据库的安装和使用,这里建议的版本是那个版本及以上?同时MONGODB 那个版本出现了时序数据库的概念和使用方式?
MONGODB 在5.0 版本后推出了,在线数据重新分片的功能,这让很多之前分片键选错或业务改造的同学,在MOGNODB 数据分片部分获得了重生的机会通过 reshardcollection 命令就可以重新分片。
后台将所有当
前集合的数据复制并重新写入新集合,同时与应用程序新的写入保持同步。
将重新分片花费的时间从几周或几个月压缩到几分钟或几小时,避免了冗长繁杂的手动数据迁移。
同时5.0 推出了时序数据表的功能,为时序数据在MONGODB中实现创造了可能。
9 Mongodb 在复制集中有几种节点的类型 ,分别代表的意义?
MOGNODB 复制集合中,节点的类型有以下几种
Primary
主节点
,写节点
secondary 从节点,读节点 ,选举节点
Arbiter 参与选举投票的节点
Secondary hidden 隐藏节点
10 如果系统中出现一个从节点,由于硬件的原因导致他经常出现延迟,但是目前需要他作为一个节点存在在系统中,我们可以直接连接他 即可,但是因为延迟,需要这个节点做到以下工作,1 不能进行投票 2 不能被选举 2 不能通过集群连接到这个节点 ?
这里应该在MONGODB 的选择中需要针对这个问题的节点设置为hidden , 也就是这个节点 对于整个集群是隐藏的,在设置中这个节点是不在参与投票,并且在使用MONGODB 的写大多数部分对于这个节点是无效的,也就是这个节点虽然是连接到集群中,但是不餐饮集群中的任何操作,对于集群是隐藏,仅仅进行了数据复制和数据直连读取的功能。
11 在MONGODB 的使用中,公司虽然对于MONGODB 的备份有一定的规划,通过SNAPSHOT 镜像的方式来进行备份已经提上日程,但是目前还需要通过文件拷贝的方式进行备份? 怎么来操作
虽然mongodb 在备份中可以通过 mongodump 等方式来进行备份,或通过其他的方式文件快照的方式,但是目前如果无法做到,但需要拷贝某一个时刻的数据文件作为备份,则可以考虑在原有的集群中,添加一个hidden节点,然后在备份的过场中,将节点停止掉,在数据文件CP 后,在开启节点,作为一个临时的备份的方案。
12 MONGODB 在那个版本可以不在通过TTL 索引来进行 expireAfterSeconds 的操作,并且可以直接将现有的索引直接转换为唯一索引?
MONGODB 5.1 后的版本将不在强制通过TTL 索引来进行超过预期时间的索引的数据的处理,而是直接可以通过collmod 命令可以将自动删除数据的功能添加在普通索引中,而6.0中可以在数据允许的情况下,方便的将普通索引转换为唯一索引。
希望他们不要看到这个文字,周一我就考考他俩
mysql索引
索引
mongodb
mongodb命令
文章转载自
AustinDatabases
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨