赞
踩
引入了分片机制之后,MongoDB启用了配置服务器(config server) 来存储元数据,这些元数据包括分片信息、权限控制信息,用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。
MongoDB的配置服务器有一个很大的优点,就是主节点崩溃了,它也可以继续提供读服务。
大多数中间件的主从结构都是在主节点崩溃之后完全不可用,直到选举出了一个新的主节点。
但是不管怎么说,配置服务器在MongoDB里是一个非常关键的组件,如果一旦配置服务器有问题,哪怕只是轻微地性能抖动一下,对整个MongoDB集群的影响都很大。
MongoDB的副本也是MongoDB实例,它们和主实例持有一样的数据。在MongoDB里,用Primary来代表主实例,用Secondary来代表副本实例。主从实例合并在一起,也叫做一个复制集(Replica Set)
类似于数据库的读写分离机制,可以在MongoDB上进行读写分离。读从Secondary0实例读,写入Primary实例,同时Secondary0和Secondary1从Primary实例里同步数据
在MongoDB里,主从之间的数据同步是通过所谓的oplog来实现的,类似MySQL的binlog。但是oplog会有一些缺点:
和Kafka的写入语义非常像,可以通过参数来控制写入数据究竟写到哪里,写入语义对性能、可用性和数据可靠性有显著的影响。
在MongoDB里,写入语义也叫Write Concern,它由w、j和wtimeout三个参数控制。
它的取值如下:
majority
:要求写操作已经同步给大部分节点,默认取值,可用性强,但是写入性能差N
:如果N=1,要求必须写入主节点;如果N大于1,那么就必须写入主节点,而且写入N-1个从节点;如果N=0,那么就不用等任何节点写入。性能很好,但是虽然客户端收到了成功的响应,数据也有可能丢失。控制数据有没有被写到磁盘上,对于j来说它的取值就是true或false
写入的超时时间,只会在w>1
的时候生效。
在超时之后MongoDB就直接返回一个错误,但是这种情况下,MongoDB可能还是写入数据成功了
面试话题引导
在整个MongoDB的面试过程中,注意和不同的中间件进行对比,凸显在这方面的积累
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。