写过程介绍
当使用insert/update/remove/save等操作更新集合中的数据时,只是修改了数据在内存中的映像,数据更新并没有同步地保存到磁盘上,而且更新内存中的数据之前,更新操作会被记录到journal日志文件中。
写安全级别介绍
写入安全是一种由客户端设置的,用于控制写入安全级别的机制,通过使用写入安全机制可以提高数据的可靠性
MongoDB提供了四种写入界别,分别是:
- Unacknowledged 非确认式写入
- Acknowledge 确认式写入
- Journaled 日志写入
- Replica Acknowledged 复制确认式写入
非确认式写入
非确认式写入不会返回任何结果,对于写操作,在没有得到服务器写入确认的情况下就立即返回,所以无法知道是否写入成功。
确认式写入
写操作必须得到MongoDB服务器的写入确认,如果写入失败,服务器会返回异常
journal日志简介
- journal日志作用相当于Oracle中的redo日志文件,用于故障恢复和持久化
- 64位机器上,MongoDB2.0以上版本默认情况下是开启了journal
- journal文件位于journal目录中,只能以追加方式添加数据,文件名以j._开头
- 数据库正常关闭时(例如:db.shutdownServer()来关停数据库),数据库服务会清空journal目录下的所有文件
- MongoDB数据库每隔100ms(或journal和数据文件不在同一磁盘则是30ms)想joournal文件中flush一次数据
日志写入
写操作要等到操作记录存储到journal日志后才返回结果,这种写入方式是可以容忍服务器突然宕机,有效的保障数据的可靠性
复制集确认式写入
写操作不仅要得到主节点的写入确认,还需要得到从节点的写入确认,可以设置写入节点的个数,此处设置为2,所以写入结点为2时返回确认信息。
总结
设置写安全级别,其实就是在写操作的性能和写操作的可靠性之间去一个权衡,使用的写安全级别越高,写操作等待时间越长,数据的可靠性也就越高。