更加复杂,但是灵活的方法,用于路由报表查询到一个专属节点去使用标签和读偏好。

因为使用隐藏成员,设置一个成员为priority: 0,但是不设置它为隐藏。然而,分配一个标签use: reporting:PRIMARY> conf = rs.config()

{ "_id" : "test", "version" : 21, "members" : [ { "_id" : 0, "host" : "xucy.local:27017", }, { "_id" : 1, "host" : "xucy.local:28017", }, { "_id" : 2, "host" : "xucy.local:29017", } ] } // we'll use members[1], the instance on port 28017

PRIMARY> conf.members[1].priority = 0

PRIMARY> conf.members[1].tags = { "use": "reporting" }

PRIMARY> conf.version += 1

PRIMARY> rs.reconfig(conf)

[...]

像之前一样,xucy.local:28017绝不会成为主;然而,在这种情况下其他两个机器变得不可达,你的应用将能处理读到报表服务器。它会继续不用说你的报表应该在这样一个事件期间暂停。

你的报表代码将会像这样(用Python,这次):from pymongo import MongoReplicaSetClient

from pymongo.read_preferences import ReadPreference

rep_set = MongoReplicaSetClient( 'xucy.local:27017,xucy.local:28017,xucy.local:29017', replicaSet = 'test', read_preference = ReadPreference.SECONDARY, tag_sets = [{'use':'reporting'}] ) # check to ensure we're not running reporting against the sole remaining secondary if rep_set.primary is not None: rep_set.my_application.users.aggregate(...)

以上只发送报表查询到副本标记有use: reporting,并且如果没有可用的主,它根本上避免运行。在实践中,你会抛出异常并在你的扩展代码中处理它们,如果你发现没有主!更好的还是,你的监控可以设置运行时可用的值,你可以转移,例如,reporting_system.ok()。

益处和考虑

使用标签和读偏好允许一些级别的灵活性,而那在隐藏成员中是不可能的。

报表实例可以容易添加

因为你的连接代码是可定义的,而不是指定到一个专门的主机,添加更多节点为报表作业,只添加他们并标记他们,像这样:PRIMARY> rs.add({_id:3, host:"xucy.local:30017", priority:0, tags:{'use':'reporting'}})

你存在的代码将会利用新的容量,并且复制集将继续运行,不用触发选举和从客户端断开连接。

报表实例可以被跳过或删除

报表标记可以被移动,或者甚至移除,如果你需要提供读带宽给其他作业在必要时。像这样的一个重新配置将会触发选举,并重连所有客户端,但是这不会比其他选项更糟糕。注意:这是一个反模式的通过发布生产读到副本成员来增加常用容量。这只是一个紧急方式。

一些驱动需要手工同步

Ruby驱动(像1.9.2),例如,不会刷新副本集的视图除非客户端像这样显式初始化,使用refresh_mode: :sync。检查你的驱动文档。

结论

简单的复制配置已经成为我喜欢MongoDB原因之一,它使得MySQL复制看起来像出自石器时代。它有些粗糙,但是已经在不断提升性能。无论你使用标记集合或者隐藏成员,构建一个报表架构在MongoDB的复制属性上,简化操作,让你专注于构建一个伟大的应用。

mysql反模式_MongoDB报表实例 -- 标签成员方案相关推荐

  1. MongoDB报表实例 -- 标签成员方案

    更加复杂,但是灵活的方法,用于路由报表查询到一个专属节点去使用标签和读偏好. 因为使用隐藏成员,设置一个成员为priority: 0,但是不设置它为隐藏.然而,分配一个标签use: reporting ...

  2. mysql反模式_myfat: MyFat是MyBatis的DAO功能增强插件

    MyFat让MyBatis更胖 简介 | Intro MyFat是MyBatis的DAO功能增强插件,利用全功能持久层工具jSqlBox来补足MyBatis缺少的功能.MyFat需Java8或以上. ...

  3. 演进式架构读书笔记(四):陷阱与反模式

    演进式架构的陷阱和反模式 反模式:供应商为王.即以供应商提供的架构为核心来组织自身业务,被供应商掌控全局.类似于20200517的HW事件,美国通过掐断半导体晶圆片的供给(非禁止,要许可).也就是说, ...

  4. mysql 说说反模式设计_sql反模式分析1

    第二章:乱穿马路 2.1 目标:存储多值属性 2.2 反模式:格式化的逗号分隔列表   模糊匹配无法使用索引,影响性能:多表关联麻烦,却极大影响性能:执行聚合查询不方便开发和调试:更新某个字段值必须执 ...

  5. mysql 说说反模式设计_关于反模式、设计和复用的一些想法

    在维护系统的时候发现有个工作经验超级丰富的同事在C#代码中使用了goto,这段代码是一个很长的方法,goto的作用是为了复用两段逻辑.当我第一次看到goto是为了复用一段C#代码的时候感觉无比诡异,总 ...

  6. kubernetes 部署_用于Kubernetes部署的10种反模式

    kubernetes 部署 As container adoption and usage continues to rise, Kubernetes (K8s) has become the lea ...

  7. pdo mysql 绑定查询_php mysql PDO 查询操作的实例详解

    php mysql PDO 查询操作的实例详解 php mysql PDO 查询操作的实例详解 这篇文章主要介绍了php mysql PDO 查询操作的实例详解的相关资料,希望通过本文能帮助到大家,需 ...

  8. [译] How to NOT React:React 中常见的反模式与陷阱

    原文地址:How to NOT React: Common Anti-Patterns and Gotchas in React 原文作者:NeONBRAND 译文出自:掘金翻译计划 本文永久链接:g ...

  9. 实体服务是一种反模式

    在微服务架构中,最重要的是要保持服务间的隔离.实体服务(Entity Service)是被广泛应用于微服务架构上的一种模式,但其实它是一种反模式,因为它背离了服务隔离的原则.Michael Nygar ...

最新文章

  1. tuple(元组)备注
  2. 中国科协发布20个重大科学问题和工程技术难题
  3. html监听页面关闭事件,JS针对浏览器窗口关闭事件的监听方法集锦
  4. http://blog.sina.com.cn/s/blog_7b9d64af0101cjci.html
  5. 档案和社会保险究竟有什么关系?【转】
  6. 如何从开始掌控会议?
  7. 【开源中国众包】快来参与开源中国众包平台的开发包
  8. 原创:PHP乱码怎么办?五种方法彻底解决PHP乱码问题
  9. php redis list llen,redis llen list 命令简介
  10. Centos7下yum安装MySQL 5.7
  11. java基本操作-2
  12. 20200102每日一句
  13. zemax仿真半导体激光器
  14. pmu2008终端服务器,PMU装置MMI子系统的研发
  15. 用php表示掷骰子两次比大小,[宜配屋]听图阁
  16. latex 公式编号
  17. 不同内核浏览器的差异以及浏览器渲染简介(转)
  18. Excel中按多个符号进行分列
  19. 卸载程序时总是 显示“请等待当前程序完成卸载或更改”!
  20. Origin1——设置坐标轴、字体、标签等

热门文章

  1. python装饰器详细剖析
  2. sklearn综合示例9:分类问题的onehot与预测阈值调整
  3. Elasticsearch中的Multi Match Query
  4. 数据挖掘之关联分析四(连续属性处理)
  5. Spark性能优化指南:高级篇
  6. 概率论面试系列第一弹: 贝叶斯公式
  7. [译] 我们是如何高效实现一致性哈希的
  8. HBase最佳实践-读性能优化策略
  9. Tomcat源代码阅读系列之八:Tomcat 设计模式总结
  10. sfp光模块和sfp+高速线缆有什么区别?