MongoDB解析 2-XML配置文件

前言

前面我们梳理了MongoDB的一些常见的理论知识

MongoDB解析 1-理论基础 - chch213 - 博客园 (cnblogs.com)

接下来我们重点看看 spring-data-mongodb 2.x 与 3.x 存在很大变化

官网说明如下:

GitHub - spring-projects/spring-data-mongodb: Provide support to increase developer productivity in Java when using MongoDB. Uses familiar Spring concepts such as a template classes for core API usage and lightweight repository style data access.

 

 

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博客

 

posted @ 2022-06-28 00:28  chch213  阅读(478)  评论(0编辑  收藏  举报