MongoDB解析 2-XML配置文件
前言
前面我们梳理了MongoDB的一些常见的理论知识
MongoDB解析 1-理论基础 - chch213 - 博客园 (cnblogs.com)
接下来我们重点看看 spring-data-mongodb 2.x 与 3.x 存在很大变化
官网说明如下:
xml配置变化对比:
2.X:
mongo写入安全mongo本身也有一整套的写入安全机制,但是在这篇的内容里只介绍一小部分相关部分.先放一个链接可以跳过本节不看直接看这个
链接.
- WriteConcern.NONE:没有异常抛出
- WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
- WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
- WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
- WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
- WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
- WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--从1.7开始定义访问MongoDB的MongoClient id:MongoClient的名称,默认值:mongoClient port:连到到MongoDB服务器的端口号,默认:27017 host:连接到MongoDB服务器的host,默认:localhost replica-set:逗号分隔的的副本集集合,格式为host:port,host:port credentials:用户身份认证逗号分隔的配置,格式:username:password@database,如果传递的认证包含逗号,则使用单引号括起来 --> <mongo:mongo-client id="mongoClient" host="172.25.16.117" port="27017" credentials="user:password@db" replica-set=""> <!-- description : 描述 min-connections-per-host:客户端最小连接数 connections-per-host:客户端最大连接数,超过了将会被阻塞,默认100 threads-allowed-to-block-for-connection-multiplier:可被阻塞的线程数因子,默认值为5,如果connectionsPerHost 配置为10,那么最多能阻塞50个线程,超过50个之后就会收到一个异常 max-wait-time:阻塞线程获取连接的最长等待时间,默认120000 ms max-connection-idle-time:连接池连接最大空闲时间 max-connection-life-time:连接池连接的最大存活时间 connect-timeout:连接超时时间,默认值是0,就是不超时 socket-timeout:socket超时时间,默认值是0,就是不超时 socket-keep-alive:keep alive标志,默认false server-selection-timeout:服务器查询超时时间,它定义驱动在抛出异常之前等待服务器查询成功,默认30s,单位milliseconds read-preference:MongoDB有5种ReadPreference模式: primary 主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常。 primaryPreferred 首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点。 secondary 从节点,读操作只在从节点, 如果从节点不可用,报错或者抛出异常。 secondaryPreferred 首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点。 nearest 最邻近节点,读操作在最邻近的成员,可能是主节点或者从节点。 write-concern:WriteConcern的7种写入安全机制抛出异常的级别 heartbeat-frequency:驱动用来确保集群中服务器状态的心跳频率 min-heartbeat-frequency:驱动重新检查服务器状态最少等待时间 heartbeat-connect-timeout:集群心跳连接的超时时间 heartbeat-socket-timeout:集群心跳连接的socket超时时间 ssl:驱动是否使用ssl进行连接,默认是false ssl-socket-factory-ref:用来进行ssl连接的SSLSocketFactory,如果配置为none,则使用SSLSocketFactory.getDefault() --> <mongo:client-options description="" min-connections-per-host="" /> </mongo:mongo-client> <mongo:db-factory id="mongoDbFactory" dbname="member" mongo-ref="mongoClient"/> <mongo:template id="mongoTemplate" db-factory-ref="mongoDbFactory" write-concern="NORMAL"/> </beans>
3.X:
mongodb的写入策略有多种方式,写入策略是指当客户端发起写入请求后,数据库什么时候给应答,mongodb有三种处理策略:客户端发出去的时候,服务器收到请求的时候,服务器写入磁盘的时候
Unacknowledged
客户端发出请求丢到socket的时候就收到相应,这个时候客户端不需要等地服务器的应答,但是的本地的驱动还是尽可能的通知客户端网络的异常,这和客户端操作系统的配置有关。就像现实中邮寄信件一样,丢到信箱就结束了,但是如果信箱坏了,发信人还是能知道的。
Acknowledged
这种方式客户端发送接口会等待服务器给的确认,这种方式一定能确保服务器收到了客户端的请求,并且服务器能够异常时,响应客户端。
Journaled
Journaled方式相比Acknowledged的方式是要保证服务器端已经写入到硬盘文件了。对于Acknowledged的方式有可能服务收到请求数据相应客户端后的一瞬间当机了,这个数据就丢失了,但是对于Journaled方式,服务器保证写入到磁盘后再相应客户端,即使当机了,也不会导致数据丢失。
Replica Acknowledged
这个方式和Acknowledged是一样的意思,适用于Replica sets模式。Acknowledged模式下只有一台机器收到了请求就返回了,对于复制集模式有多台机器的情况,可以要求有多台机器收到写入请求后再相应客户端。这种更安全,但是导致了客户端耗时增加,所以要结合自己的场景设置合适的策略。
mongodb写入策略(WriteConcern) - ExplorerMan - 博客园 (cnblogs.com)
(39条消息) Spring MongoDB mongo-client client-options配置详解_若石之上的博客-CSDN博客_mongo:mongo-client
(39条消息) Spring认证中国教育管理中心-Spring Data MongoDB教程二_技能咖的博客-CSDN博客
本文来自博客园,作者:chch213,转载请注明原文链接:https://www.cnblogs.com/chch213/p/16418075.html