mongo驱动连接
标签(空格分隔): Mongodb-Client Mongodb
官方文档:Connection String URI Format
DBA特别推荐:MongoDB Driver:使用正确的姿势连接分片集群
其中要注意的是:mongos链接,推荐配置多台mongos实现负载均衡,因此在配置分片集群时,驱动链接同样应该
配置多个mongos
地址
- 用户访问 mongos 跟访问单个 mongod 类似
- 所有 mongos 是对等关系,用户访问分片集群可通过任意一个或多个mongos
- mongos 本身是无状态的,可任意扩展,集群的服务能力为『Shard服务能力之和』与『mongos服务能力之和』的最小值。
- 访问分片集群时,最好将应用负载均匀的分散到多个 mongos 上
驱动链接格式:mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
基础选项
基础选项 | 说明 | 示例 |
---|---|---|
mongodb:// | 必写前缀 | |
host1 | 单点mongod:指定单点服务地址;副本集:以, 分隔,配置副本集所有服务地址;分片集群:以, 分隔,配置副本集所有mongos服务地址;参照以下示例 | |
:port1 | 端口,默认27017 | |
/database | 鉴权数据库,默认为admin;建议必填 | |
/database | 鉴权数据库,默认为admin;建议必填 |
示例:mongodb://tgor:12345678@192.168.101.41:27017,192.168.101.42:27017,192.168.101.43:27017/db1
副本集选项
副本集选项 | 说明 | 示例 |
---|---|---|
replicaSet | 副本集名称,需要配置多个服务器节点使用,如果只配置一个节点,驱动只会链接其一 |
示例:mongodb://tgor:12345678@192.168.101.41:27017,192.168.101.42:27017,192.168.101.43:27017/db1?replicaSet=testRS
连接选项
连接选项 | 说明 | 示例 |
---|---|---|
ssl | true: 使用TLS/SSL初始化连接;默认false: 不使用TLS/SSL初始化连接 | |
connectTimeoutMS | 链接超时毫秒数,默认是永不超时,建议必填 | |
maxPoolSize | 连接池连接数最大值,默认100 | |
minPoolSize | 连接池连接数最小值,默认0 | |
waitQueueMultiple | 驱动强行限制线程同时等待连接的个数 | |
waitQueueTimeoutMS | 在超时之前,线程等待连接生效的总时间。如果连接池到达最大并且所有的连接都在使用,这个参数就生效了 |
【写】选项
【写】选项 | 说明 | 示例 |
---|---|---|
w | w = N >= 1:表示写操作,得到N个实例或N个副本集节点确认安全写入,v2.0版本以后为默认选项;0:非安全写入,表示写操作,无需得到实例确认 | |
wtimeoutMS | 写操作超时毫秒数,0:不限制 | |
journal | 操作日志选项:true:数据在写入到DB磁盘文件之前,MongoDB会先把操作写入到Journal文件,是确认写入了Journal文件就返回;false:反之;参考:mongodb读写性能分析 |
注意:(官文)
1. 如果设置了wtimeoutMS写操作超时,则必须要设置w>0
,驱动要求确认安全写入;
2. w
与j
决定了服务端何时确认写操作成功:The w option and the j option determine when mongod instances acknowledge write operations.(参考下表)
- | j:未指定 | j:true | j:false |
---|---|---|---|
w:1 | In memory:写入内存即确认 | On-disk journal:写入磁盘日志 | In memory:写入内存即确认 |
w:”majority” | On-disk journal if running with journaling | On-disk journal | In memory |
服务选择与发现选项
其他选项 | 说明 | 示例 |
---|---|---|
heartbeatFrequencyMS | 心跳间隙长度(毫秒) |
Java驱动示例
注意:MongoClient会自动创建连接池,因此,大部分情况下,整个JVM应用中只需要有一个MongoClient实例就可以。
private MongoClientURI clientURI = new MongoClientURI("mongodb://tgor:123456@192.168.x.x:27017,192.168.y.y:27017/testdb?readPreference=secondary&connectTimeoutMS=5000&w=0");
private MongoClient mongo = new MongoClient(clientURI);
@Bean
protected Datastore getDatastore() {
Morphia morphia = new Morphia();
return morphia.createDatastore(mongo, clientURI.getDatabase());
}