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

因为使用隐藏成员,设置一个成员为priority: 0,但是不设置它为隐藏。然而,分配一个标签use: reporting:

1
2
3
4
5
6
7
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,这次):

1
2
3
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()。

益处和考虑

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

报表实例可以容易添加

因为你的连接代码是可定义的,而不是指定到一个专门的主机,添加更多节点为报表作业,只添加他们并标记他们,像这样:

1
PRIMARY> rs.add({_id:3, host:"xucy.local:30017", priority:0, tags:{'use':'reporting'}})

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

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

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

一些驱动需要手工同步

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

结论

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

本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1751798 ,如需转载请自行联系原作者

MongoDB报表实例 -- 标签成员方案相关推荐

  1. mysql反模式_MongoDB报表实例 -- 标签成员方案

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

  2. MongoDB 复制集 (一) 成员介绍

       一 MongoDB 复制集简介          MongoDB复制集机制主要分为两种:          Master-Slave    (主从复制)       这个已经不建议使用     ...

  3. MySQL与MongoDB设计实例对比

    MySQL与MongoDB设计实例对比 2011年06月15日14:06 来源:huoding 作者:老王 编辑:胡铭娅 评论:0条 如果使用MongoDB的话,应该如何存取数据呢? 如果使用Mong ...

  4. 实例变量 成员变量 java 1615135036

    实例变量 成员变量 java 1615135036 实例变量 演练 结果

  5. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 原文:Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 Asp.Net Cor ...

  6. sql行转列 列数据不定 sql交叉报表实例

    sql交叉报表实例 建表: 在查询分析器里运行: CREATE TABLE [Test] ( [id] [int] IDENTITY (1, 1) NOT NULL , [name] [nvarcha ...

  7. 使用__slots__限定实例的成员列表

    使用__slots__限定实例的成员列表 默认情况下,python对象队象的每个实例(instance)都会有一个字典来存储该实例的属性,这样做的好处在于运行时期每个对象可以任意设置新的属性.而相对应 ...

  8. SAP abap alv报表实例

    这是一个sap alv报表实例 REPORT ztest005.*定义类型组 TYPE-POOLS: abap,slis.*定义ALV变量 DATA : lt_fieldcat TYPE slis_t ...

  9. 最新官方水晶报表实例 - 报表,应用程序

    ·报表实例 ·针对 .NET 开发者的应用程序实例 ·针对其它开发工具的应用程序实例 ·针对 Web 开发者 (ASP, CSP, JSP) 的应用程序实例 报表实例 要获得完整的列表和下载报表实例的 ...

最新文章

  1. 企业数字化转型本质上是“人”的转型和“组织”的转型
  2. oracle设置表字段小写,将oracle中的字段和表名全部修改为小写
  3. ZOJ 3962:Seven Segment Display(思维)
  4. Yammer从Scala转向Java
  5. java struts2 例子_java struts2入门学习实例--用户注册和用户登录整合
  6. rhel6+apache2.4+mysql5.7+php5.6部署LAMP架构
  7. 阿里淘系21春招实习过经
  8. 第5章 用函数封装程序功能
  9. 使用rmmod无法卸载驱动,强制卸除的两种方法
  10. 前端代码审查工具_前端代码审查中应检查的内容
  11. 字符串类型变量的相关内置函数详解
  12. 谷粒商城学习笔记(更新中)
  13. 立创EDA——PCB的布局(四)
  14. 爬虫爬取python词汇_Python爬虫入门案例:获取百词斩已学单词列表
  15. AE插件:能量激光描边光效特效Saber
  16. Pr学习(3)AI CC2017/2018 如何破解?
  17. px、pt、dpi、dip、分辨率、屏幕尺寸等等概念
  18. ps cs6导出html,Photoshop cs6导出和载入笔刷方法介绍
  19. 顶级文案到底需要怎么嗨?
  20. 英语学习打卡-美国语文1-4

热门文章

  1. C#GDI+图像处理
  2. OSChina 周日乱弹 —— 表白的终极境界!
  3. EBS服务重启脚本(应用和数据库)
  4. 技术人员如何转型为产品经理
  5. mysql M/S配置小记
  6. 易飞90设计自己定义画面新增功能说明
  7. Oracle“死锁”模拟
  8. js iframe是否加载完成,加载完成执行函数
  9. quick check
  10. js正则验证手机号码有效性