MongoDB 读写
写事务
const schema = new Schema({ name: String }, {
writeConcern: {
w: 'majority',
j: true,
wtimeout: 1000
}
});
w:表示有多少个节点写完成后,才算写完成。可以是数字。比如w等于2的时候,表示有两个节点写完成后才返回。w等于0的时候,表示不确认写操作
也可以是’majority’,表示超过半数节点写完后才返回,
j:表示要先写journal日志,再写数据。
wtimeout:表示写超时的时间
读事务
readPreference
const schema = new Schema({..}, { read: 'primary' }); // also aliased as 'p'
const schema = new Schema({..}, { read: 'primaryPreferred' }); // aliased as 'pp'
const schema = new Schema({..}, { read: 'secondary' }); // aliased as 's'
const schema = new Schema({..}, { read: 'secondaryPreferred' }); // aliased as 'sp'
const schema = new Schema({..}, { read: 'nearest' }); // aliased as 'n'
read:这个参数是readPreference,表示节点读的策略
- primary:只选择主节点
- primaryPreferred:优先选择主节点,如果主节点不可用,则选择从节点
- secondary:只选择从节点
- secondaryPreferred:先选择从节点,如果从节点不可用,则选择主节点
- nearest:选择最近的节点
readConcern
new Query().readConcern('local')
new Query().readConcern('l') // same as local
new Query().readConcern('available')
new Query().readConcern('a') // same as available
new Query().readConcern('majority')
new Query().readConcern('m') // same as majority
new Query().readConcern('linearizable')
new Query().readConcern('lz') // same as linearizable
new Query().readConcern('snapshot')
new Query().readConcern('s') // same as snapshot
readConcern:类似于关系数据库的隔离级别。用于控制从副本集和副本分片读取的数据一致性和隔离性
- local:读取所有可用并且是当前节点分片的数据
- available:读取所有可用的数据
- majority: 读取在大多数节点提交完成的数据
- linerizable:可线性化读取文档
- snapshot: 读取最近快照中的数据