首页 > 数据库 >MONGODB 奇怪12问 switch over

MONGODB 奇怪12问 switch over

时间:2023-06-22 12:03:45浏览次数:35  
标签:MONGODB over cache 索引 switch 内存 数据 节点


MONGODB   奇怪12问  switch over_数据

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。

最近我们公司的 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秒以上,避免由于时间设置太短导致的问题。

MONGODB   奇怪12问  switch over_mongodb_02

4   MONGODB 在复制集中常用的索引类型有那些?

MONGODB 中主要的索引类型主要有以下几种

1  单字段索引

2  复合索引

3  多键索引

4  文本索引

6  通配符索引

7   唯一索引

8   隐藏索引

而在这些索引中还会有其他的组织形式,如sparse 索引,我们可以称之为稀疏索引。TTL 索引,部分索引,不区分大小写的索引 等等 这些索引在使用上的功能的划分。

5  如何判断一个MONGODB 的INDEX 是从来没有使用的?

通过  db.collation_name.aggregate([{$indexStats: {}}]) 中的 ops 中的信息来获取时间和次数

MONGODB   奇怪12问  switch over_nosql_03

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 的值的变化、

MONGODB   奇怪12问  switch over_nosql_04

除此以外还可以通过

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 的写大多数部分对于这个节点是无效的,也就是这个节点虽然是连接到集群中,但是不餐饮集群中的任何操作,对于集群是隐藏,仅仅进行了数据复制和数据直连读取的功能。

MONGODB   奇怪12问  switch over_数据_05

11  在MONGODB 的使用中,公司虽然对于MONGODB 的备份有一定的规划,通过SNAPSHOT 镜像的方式来进行备份已经提上日程,但是目前还需要通过文件拷贝的方式进行备份? 怎么来操作

虽然mongodb 在备份中可以通过 mongodump 等方式来进行备份,或通过其他的方式文件快照的方式,但是目前如果无法做到,但需要拷贝某一个时刻的数据文件作为备份,则可以考虑在原有的集群中,添加一个hidden节点,然后在备份的过场中,将节点停止掉,在数据文件CP 后,在开启节点,作为一个临时的备份的方案。

12  MONGODB 在那个版本可以不在通过TTL 索引来进行 expireAfterSeconds 的操作,并且可以直接将现有的索引直接转换为唯一索引?

MONGODB 5.1 后的版本将不在强制通过TTL 索引来进行超过预期时间的索引的数据的处理,而是直接可以通过collmod 命令可以将自动删除数据的功能添加在普通索引中,而6.0中可以在数据允许的情况下,方便的将普通索引转换为唯一索引。

希望他们不要看到这个文字,周一我就考考他俩 

MONGODB   奇怪12问  switch over_mongodb_06

标签:MONGODB,over,cache,索引,switch,内存,数据,节点
From: https://blog.51cto.com/u_14150796/6534563

相关文章

  • 混合性对话:Towards Conversational Recommendation over Multi-Type Dialogs
    混合型对话传统的人机对话研究专注于单一类型的对话,并且往往预设用户一开始就清楚对话目标。但实际应用中,人机对话常常混合了多种类型,例如闲聊、任务导向对话、推荐对话、问答等,并且用户目标是未知的。在这样的混合型对话中,机器人需要主动自然地进行对话推荐。“混合型对话”这......
  • ubuntu安装mongodb
    1.下载mongodbhttps://www.mongodb.com/try/download/community下载ubuntu的tgz版本2.解压tgz解压安装包到工作目录3.修改.bashrcexportMONGODB_HOME=xxx/mongodbexportPATH=$PATH:$MONGODB_HOME/bin4.启动mongodbmongod--dbpath$MONGODB_HOME/data/db--logpath$M......
  • mongodb-安装过程
    1、下载地址https://www.mongodb.com/try/download/community2、安装过程关闭THP,提高性能#vim/etc/rc.localiftest-f/sys/kernel/mm/transparent_hugepage/enabled;thenechonever>/sys/kernel/mm/transparent_hugepage/enabledfiiftest-f/sys/kernel/mm/t......
  • 聊一聊 Rust 的 stack overflow
    早上看到了这篇文章智能指针有可能会让你的应用崩溃,下面分析一下会导致stackoverflow的代码structNode<T>{val:T,next:Option<Box<Node<T>>>,}structLinkedList<T>{head:Option<Box<Node<T>>>,}impl<T>LinkedList<T&......
  • MongoDB学习笔记
    MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存......
  • centos 安装mongodb
    在CentOS系统中安装MongoDB可以按照以下步骤进行:配置MongoDB的Yum仓库sudovi/etc/yum.repos.d/mongodb-org-4.4.repo在编辑器中输入以下内容:[mongodb-org-4.4]name=MongoDBRepositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.......
  • Ubuntu正常启动黑屏,但可以使用recovery resume启动
    硬件:huaweimatebookEi712代iT问题:安装Ubuntu系统grub正常工作,直接启动黑屏,需强制关机。尝试:grub使用recoveryresume启动成功,但分辨率、刷新率不可调整。分析:显卡兼容问题处理方法:百度解决决方案:首先recoveryresume启动,进入终端方案一:直接修改grub.cfgsudoge......
  • Mongodb 在工业场景下的数字解决方案
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql ,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。译:非常高兴今天和大家在一起,来讨论一些抽象的感念,像工业4.0 ,数字制造业等概念。通过今天演讲我们来说说mongodb altas在行业......
  • 微服务 – Spring Cloud – Eureka – Discovery 服务发现
    如何发现服务呢?服务注册到Eureka集群中。需要通过RestTemplate和@LoadBalanced实现服务发现调用(http)。在上一篇笔记中,order服务通过estTemplate和@LoadBalanced实现调用payment服务.是通过注册在Eureka集群中的服务名称来调用的。那么如何发现这些服务呢?也就是......
  • Overlay 添加动态效果
    publicclassMyLocationOverlayextendsOverlay{privateCanvascanvas;privatefinalHandlerhandler=newHandler();privateRunnablerunnable;privateGeoPointgeoPoint;privateintxMarker,yMarker;privateintmarkerNu......