MongoDB的写入安全级别

太阳1年前技术文章578

一、MongoDB写入安全级别

为提高数据写入的安全性,在客户端可以设置相应的安全级别来进行控制,MongoDB提供四种写入级别,分别是:

1、非确认式写入(Unacknowledged)

非确认式写入不会返回任何结果,对于写操作,在没有得到服务器写入确认的情况下就立即返回结果。好处是写入效率高,不会阻塞客户端,缺点是无法确定数据是否真正的写入成功

2、确认式写入(Acknowledged)

写操作必须得到服务器的写入确认,如果写入失败会返回“DuplicateKey Error”。此时如果有数据没有写入journal日志,更没有落盘,若服务器突然断电,此时会丢失100ms的数据。

3、日志写入(Journaled)

写操作不仅要得到服务器的写入确定,还要求数据写入journal才会返回数据写入成功,保证数据库数据安全

4、副本集确定式写入(Replica Acknowledged)

不仅要得到主节点的写入确定,还需要得到备份节点的写入确定才会返回客户端数据写入成功。

二、如何控制写级别

MongoDB的写入界别是通过客户端的getLastError来实现的。

1、getLastError参数解释

字段

类型

含义

j

Boolean

如果为 true,就不需要等待写操作写入 journal 才返回。

w

integer or string

如果为 1,表明只需等待 Primary 写入确认即可返回。 如果为 2,表明必须等待 Primary 和 Secondary 都写入确认才可返回。

fsync

Boolean

如果为 true,表明数据必须落地磁盘才可返回。 其实只要写操作写入 journal ,数据就不会丢啦。

wtimeout

integer

等待的毫秒数,指定毫秒数内未返回,抛出错误。

如需实现以上的隔离级别,只需要在执行完操作后,立马执行getLastError命令即可。

2、各写入级别以及对应getLastError参数

写入级别

getLastError参数

Unacknowledged

不调用getLastError

Acknowledged

{w: 1}

Journaled

{w: 1, j: true}

Replica Acknowledged

{w: 2}

//测试数据
var doc1 = {
    name:"xiaoli",
    age:20,
    address:
    {
        province:"GuangDong",
        city:"ShenZhen"
    }
}
- 非确认式写入
var result = db.aa.insert(doc1,{writeConcern:{w:0}})
printjson(result)
- 确认式写入
var result = db.aa.insert(doc1,{writeConcern:{w:1}})
printjson(result)
- 日志写入 + wtimeout
var result = db.aa.insert(doc1,{writeConcern:{w:1,j:true,wtimeout:5}})

相关文章

大数据集群部署规划(四)组件建议规格

类型指标名称规格说明HDFS单对NameNode最大文件数1亿-单DataNode最大block数500万GC参数 -Xmx32G单个DataNode磁盘最多block数50万-单个目录下最多文件目录...

rancher上kube-prometheus部署报错处理

rancher上kube-prometheus部署报错处理

问题描述rancher 上安装kube-prometheus,版本:8.3.9  ,Chart 仓库:bitnami 服务 pod: prometheus-kube-prometheus-promet...

MySQL运维实战之备份和恢复(8.5)xtrabackup恢复增量备份

恢复增量备份时,需要先对基础全量备份进行恢复,然后再依次按增量备份的时间进行恢复。这个例子中,相关备份文件的目录结构如下:/data/backup ├── full │ &nb...

A集群导入B集群中的高可用版rancher

A集群导入B集群中的高可用版rancher

问题现象:已知在B集群中采用helm方式部署了一个高可用版本的rancher,该rancher中已经配置导入了三套集群,并且三套集群状态在rancher控制台处均显示正常,日常可借助该rancher管...

MySQL运维实战之备份和恢复(8.4)xtrabackup恢复全量备份

恢复全量备份恢复全量备份大致可以分成以下几步:解压备份文件、prepare备份文件、将数据copy到目标实例相关目录、启动数据库实例。解压文件如果备份时使用了xbstream,需要先解压备份文件。我们...

MongoDB创建索引

一、后台创建索引默认情况下,当我们对一个比较热点的集合创建索引时,直到索引创建完毕,该集合都是无法读写的。1、后台创建索引语法db.collection.createIndex( { filed: 1...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。