【问题】
在协调节点收到查询请求之后,如果本机节点中包含目标节点,是否首选本机节点?或是随机选取节点完成数据查询?
这个问题的初衷是尽量减少网络通信流量。
【解决方法】
- v2.8.4前查询默认选取随机节点,v2.8.4后查询默认首选主节点。
- 如应用场景需指定某一数据节点读,可通过设置会话属性实现,具体可参考资料: http://doc.sequoiadb.com/cn/i...
【解决方法】
- v2.8 后支持使用会话隔离实现哪个节点读优先
- 会话隔离通过设置会话属性实现,执行命令为db.setSessionAttr ( <options> ),其中options选项包括:
PreferedInstance: 会话读操作优先选择的实例,v2.8.4 前默认为‘S’,v2.8.4后 默认为‘M’
PreferedInstanceMode: 指定会话当多个实例符合 PreferedInstance 的条件时的选择模式,默认为“Random”
Timeout:指定会话执行操作的超时时间,默认10000ms - 结合PreferedInstance+PreferedInstanceMode实现会话隔离。举例,如有本机节点A、B和目标节点C,可分别配置instanceid为1、2、3,当前应用必须使查询优先走本机节点,则设置会话顺序选择实例去读取:db.setSessionAttr( { PreferedInstance : [ 1,2, 3 ] ,PreferedInstanceMode:“ordered” } ),查询会依次按照本机节点A、本机节点B、目标节点C的顺序选择。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。