MongoDB日记——MongoDB的写安全机制

时间:2024-05-20 08:16:46

写过程介绍

当使用insert/update/remove/save等操作更新集合中的数据时,只是修改了数据在内存中的映像,数据更新并没有同步地保存到磁盘上,而且更新内存中的数据之前,更新操作会被记录到journal日志文件中。
MongoDB日记——MongoDB的写安全机制

写安全级别介绍

写入安全是一种由客户端设置的,用于控制写入安全级别的机制,通过使用写入安全机制可以提高数据的可靠性

MongoDB提供了四种写入界别,分别是:

  • Unacknowledged 非确认式写入
  • Acknowledge 确认式写入
  • Journaled 日志写入
  • Replica Acknowledged 复制确认式写入

非确认式写入

非确认式写入不会返回任何结果,对于写操作,在没有得到服务器写入确认的情况下就立即返回,所以无法知道是否写入成功。
MongoDB日记——MongoDB的写安全机制

确认式写入

写操作必须得到MongoDB服务器的写入确认,如果写入失败,服务器会返回异常
MongoDB日记——MongoDB的写安全机制

journal日志简介

  • journal日志作用相当于Oracle中的redo日志文件,用于故障恢复和持久化
  • 64位机器上,MongoDB2.0以上版本默认情况下是开启了journal
  • journal文件位于journal目录中,只能以追加方式添加数据,文件名以j._开头
  • 数据库正常关闭时(例如:db.shutdownServer()来关停数据库),数据库服务会清空journal目录下的所有文件
  • MongoDB数据库每隔100ms(或journal和数据文件不在同一磁盘则是30ms)想joournal文件中flush一次数据

日志写入

写操作要等到操作记录存储到journal日志后才返回结果,这种写入方式是可以容忍服务器突然宕机,有效的保障数据的可靠性
MongoDB日记——MongoDB的写安全机制

复制集确认式写入

写操作不仅要得到主节点的写入确认,还需要得到从节点的写入确认,可以设置写入节点的个数,此处设置为2,所以写入结点为2时返回确认信息。
MongoDB日记——MongoDB的写安全机制

总结

设置写安全级别,其实就是在写操作的性能和写操作的可靠性之间去一个权衡,使用的写安全级别越高,写操作等待时间越长,数据的可靠性也就越高。