@zero1036
2017-04-10T08:46:56.000000Z
字数 2088
阅读 2026
Mongodb-Client
Mongodb
官方文档:Connection String URI Format
DBA特别推荐:MongoDB Driver:使用正确的姿势连接分片集群
其中要注意的是:mongos链接,推荐配置多台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 | 心跳间隙长度(毫秒) |
注意: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());
}