
数据库
PostgreSQL 18.6 安装记录
一、环境 项值主机192.168.6.98系统CentOS Stream 9(x86\64)SELinuxEnforcing防火墙firewalld(active)安装方式PGDG
| Read Preference Mode | Description |
|---|---|
| primary | Default mode. All operations read from the current replica set primary. |
| primaryPreferred | In most situations, operations read from the primary but if it is unavailable, operations read from secondary members. |
| secondary | All operations read from the secondary members of the replica set. |
| secondaryPreferred | In most situations, operations read from secondary members but if no secondary members are available, operations read from the primary. |
| nearest | Operations read from member of the replica set with the least network latency, irrespective of the member’s type. |
primary模式:默认模式,所有的读操作都由复制集的主节点处理; primaryPreferred模式:一般情况下,所有的读操作由主节点处理,当主节点不可用的时候,读操作由备份节点处理; secondary模式:所有的读操作由复制集的备份节点处理; secondaryPreferred模式:一般情况下,所有的读操作由备份节点处理,当所有的备份阶段宕机后,读操作由主节点处理; nearest模式:选择复制集中的读延迟最少的节点处理读操作,主节点以及备份节点都有可能处理读操作;
<span style="font-size:14px;">/**
* 初始化mongodb客户端
*
*/
protected void initMongo(){
MongoOptions op = new MongoOptions();
op.setSafe(isSave);
op.setConnectionsPerHost(connectionPerHost);
op.setConnectTimeout(connectionTimeout);
// if online , it uses replicate set and set secondary value of read preference
// ReadPreference which reads secondary if available,
op.setReadPreference(ReadPreference.secondary());
}
mongo = new Mongo(addressList, op);
}
</span>
注:new Mongo(addressList,op); 方法中的addressList对象可以是复制集集群中的每一个节点也可以是分片集群中的每一个片(主从),也可以是单个的mogod实例,mongo在初始化时可以获取mongo server的具体信息,这些信息在后续读写操作中会被用到。
即在初始化mongo客户算时设置读优先的模式。mongo客户端源码的设计有一个非常巧妙的地方,就是下层对象在实例化的时候可以获取到上层对象的引用,从而可以获取到上层对象的属性,因此不需要下层对象在调用方法时显式的传递配置信息,即配置信息可以共用,这点的设计上有点类似于log4j的设计方式,子log对象拥有父log对象的引用,递归后即每一个log实例都能获取到root日志对象的引用,这样做以后,程序能够更加简单,易读,也能使得配置的作用域最大化。在mongo中的实现是db能够持有mongo的引用,DBCollection持有db的引用,因此在进行读写操作时,DBCollection实例持有mongo引用,从而获取全局的mongo配置信息,实现在读操作时根据设置的read preference进行不同的读路由,实现一次配置,处处可用。
评论 0