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

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

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


因为使用隐藏成员,设置一个成员为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数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
4月前
|
存储 监控 NoSQL
数据存储与分析:办公室电脑屏幕监控的MongoDB应用实例
在当今数字时代,数据的存储和分析变得愈发重要,尤其是在办公环境中,对电脑屏幕进行监控成为一种日益普遍的需求。本文将介绍如何利用MongoDB数据库实现办公室电脑屏幕监控,并通过代码实例展示其应用。
219 0
|
7月前
|
存储 NoSQL 自动驾驶
MongoDB在自动驾驶场景方案及最佳实践
MongoDB在自动驾驶场景方案及最佳实践
311 1
|
7月前
|
监控 NoSQL 安全
MongoDB在游戏行业方案介绍及最佳实践
MongoDB在游戏行业方案介绍及最佳实践
490 1
|
7月前
|
数据采集 NoSQL 容灾
如何实现不同MongoDB实例间的数据复制?
除了MongoDB迁移外,NineData支持MongoDB实例间的长期复制,可应用于数据容灾、读写分离、测试数据构建等业务场景。同时,NineData也已支持数十种常见数据库的迁移复制。NineData提供即开即用的SAAS模式,及企业专属集群模式,满足企业最高的数据安全合规要求。
101 0
如何实现不同MongoDB实例间的数据复制?
|
8月前
|
存储 NoSQL Java
|
8月前
|
存储 NoSQL JavaScript
MongoDB实例:构建一个简单的任务管理应用
MongoDB作为一种灵活的文档型数据库,适用于多种应用场景。在本文中,我们将使用MongoDB构建一个简单的任务管理应用,展示其在实际应用中的使用。
99 1
|
存储 JSON 自然语言处理
Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案
书接上回,之前有一篇文章提到了标签云系统的构建:[Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)](https://v3u.cn/a_id_138),但是这篇只是浅显的说明了一下如何进行切词以及前端如何使用wordcloud2.js进行前端展示,本次主要讨论下标签分词切出来之后,如何进行存储。
Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案
|
NoSQL Java MongoDB
SpringBoot整合MongoDB完整实例
SpringBoot整合MongoDB完整实例
271 0
SpringBoot整合MongoDB完整实例
|
NoSQL Java MongoDB
SpringBoot整合MongoDB使用MongoTemplate进行增删改查实例
SpringBoot整合MongoDB使用MongoTemplate进行增删改查实例
332 0