MongoDB的写入安全级别

太阳11个月前技术文章434

一、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}})

相关文章

Elasticsearch索引慢日志配置

设置索引慢日志各种级别下的阀值,同时也支持多索引(索引名按逗号分隔)和全索引(用*通配符)操作。curl -XPUT --tlsv1.2 --negotiate -k -v -u : 'htt...

zabbix监控华为存储设备

zabbix监控华为存储设备

确认监控方式开始监控之前首先思考确认好要监控的方式。提出疑问:zabbix 监控华为存储设备推荐使用snmptrap还是snmptt呢?回答:在 Zabbix 监控华为存储设备时,您可以选择使用 SN...

WAF 透明接入模式

WAF 透明接入模式

透明接入模式只需将需要防护的网站信息添加到WAF,无需修改域名的DNS解析设置,即可实现WAF防护。如果您的源站服务器为ECS服务器或者部署在阿里云公网SLB上,那么除了使用CNAME接入模式,还可以...

Nexus 制品管理平台

Nexus 制品管理平台

Nexus 官网:https://www.sonatype.com/nexus-repository-ossNexus 是一个很强大的私服软件,不仅仅是作为 Java 的 Maven 打包使用,同样的...

MongoDB的索引(五)

十一、2d Indexes1、在MongoDB 2.2版本之前或者地址位置字段没有使用GeoJSON进行存储的情况下,我们使用2d索引比较多。2、2d索引一般是用来计算平面上的计算,对于球面的一些几何...

发表评论    

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