MongoDB集群与LBS应用系列(一)
MongoDB集群与LBS应用系列(一)
1. 概念
MongoDB作为著名的NoSQL,早已非常流行。它的地理应用也非常成熟,被foursquare用于生产环境也已经多时。本文主要记录今年6月份的一个地理产品中,使用MongoDB的过程和遇到的一些问题以及解决方案。我们在原型系统搭建时候,使用了三台机器,搭建MongoDB ReplicationSet 集群,作为地理数据库以使用。
2. 集群部署
2.1 硬件资源
三台操作系统为CentOS 64bit version6.4的服务器,IP地址和域名
192.168.2.22 mongodb0.ventlam.com
192.168.2.23 mongodb1.ventlam.com
192.168.2.24 mongodb2.ventlam.com
2.2 软件安装
2.2.1 创建MONGODB专有的软件源
下载并安装mongo 2.4.5版本,(3台机器分别执行)
vim /etc/yum.repos.d/10gen.repo
- 添加以下源列表
[10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 enabled=1
* 安装MongoDB
yum install mongo-10gen mongo-10gen-server
2.2.2 REPLICATION SET 集群搭建
部署生产环境下的MongoDB ReplicationSet ,需要数据库部署在尽可能隔离的机器上(每个数据库部署在不同的物理机器,使用不同的网络和不同的电源)。
2.2.2.1 需要配置mongodb 通过域名能够访问
修改/etc/host或者配置DNS实现(3台机器分别执行)
vim /etc/host
添加如下命令
192.168.2.22 mongodb0.ventlam.com
192.168.2.23 mongodb1.ventlam.com
192.168.2.24 mongodb2.ventlam.com
修改数据库配置文件(3台机器分别执行)
vim /etc/mongod.conf
在配置文件加入以下参数:
port = 27017 dbpath = /mnt/mongo replSet = rs0
启动数据库 (3台机器分别执行) 创建数据目录 mkdir /mnt/mongodb/,并修改配置文件启动mongodb
vim /etc/rc.d/init.d/mongod
启动
mongod service mongod start
添加开机启动
chkconfig mongod on
2.2.2.2 检查三台机器数据库是否可以互联
首先开放27017端口 (3台机器分别执行)
/sbin/iptables -I INPUT -p tcp --dport 27017 -j ACCEPT
/etc/rc.d/init.d/iptables save
然后分别检查连接情况,在所有机器输入以下命令:
mongo --host mongodb1.ventlam.com --port 27017 mongo --host mongodb2.ventlam.com --port 27017
如果都可以进入mongo shell界面,即可。否则,请检查防火墙规则。
2.2.2.3 配置repilcation set
进入mongo shell mongo 输入以下配置命令(只需要在任意一台机器执行)
rsconf = { \_id: "rs0",
members: [ { _id: 0, host: "mongodb0.ventlam.com" },
{ _id: 1, host: "mongodb1.ventlam.com" },
{ _id: 2, host: "mongodb2.ventlam.com" } ] }
2.2.2.4 初始化
rsconf rs.initiate(rsconf)
查看rsconf配置情况
rs.conf()
如果返回下列值,证明mongodb集群搭建成功
{ "_id" : "rs0", "version" : 1,
"members" : [ { "\_id" : 0, "host" : "mongodb0.ventlam.com:27017" },
{ "\_id" : 1, "host" : "mongodb1.ventlam.com:27017" },
{ "\_id" : 2, "host" : "mongodb2.ventlam.com:27017" } ] }
2.2.2.5 添加删除数据实例
rs.add("<hostname>:27017") rs.remove("<hostname>:27017")
本作品由VentLam创作,采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
MongoDB学习之--增删改查(2)
昨天简单介绍了官方驱动操作MongoDB进行增删查操作的,今天继续介绍更新操作.....
方法简介
官方驱动中更新操作使用collection的Update方法,有泛型和非泛型两个版本:
其签名如下(列出了两个简单并常用的的重载,还有几个):
public virtual WriteConcernResult Update(IMongoQuery query, IMongoUpdate update);
public virtual WriteConcernResult Update(IMongoQuery query, IMongoUpdate update, UpdateFlags flags)
首先分析一下方法参数:
IMongoQuery 和 IMongoUpdate只是两个约束接口,实现了该接口的类均可作为该方法参数,对于前者,在这里我们主要通过Query类的静态方法和 QueryBuilder<T>这个泛型类的实例方法来构造
IMongoQuery ;对于IMongoUpdate我们主要通过Update类以及其泛型版本的静态方法来构造,其静态方法返回值类型为UpdateBuilder,该类恰好实现了IMongoUpdate接口。
分析类比调用
基础实体类:
在我们关系数据库中,比如oracle或者sqlserver中按照实体类设计,表结构应该是两个,学生信息表以及地址表,但是我们假设存储在一个表中方便我们类比;我要更新数据库中信息,通常关系数据库中我们是这么做的:
update tableName set a='a' and b='b' where c='c'
在mongodb中我们就是向下面这样做:
use dbName; db.CollectionName.update({query:"query"},{"$set":{update:"update"}})
现在看我们通过C#驱动怎么构造这样一种结构:关于IMongoQuery的构造上一篇我也介绍过一些,这里只谈下上次没说的部分 ,
首先构造IMongoQuery:
a.通过QueryBuilder<T>构造
var t1 = queryBuilder.EQ<String>(t => t.Address.City, "北京");//where city="北京"
b.通过Query构造
var t2 = Query.EQ("Address.City", "北京");//where city="北京"
var t3 = Query<Student>.EQ<String>(t => t.Address.City, "北京");//where city="北京"
其次,构造IMongoUpdate
var u1 = Update<Student>.Set<String>(t => t.Address.City, "上海");//set city="上海"
var u2 = Update.Set("Address.City", "上海");//set city="上海"
这样可以往下调用update方法了
collection.Update(t1, u2);//只更新满足t1的一个文档对象
collection.Update(t1, u2, UpdateFlags.Multi);//更新满足t1的所有文档对象
今天就到这里了,另:Update类还有其他用于设置的方法不单set方法,这里有兴趣的可以看下api,加深下了解。。。
MongoDB集群与LBS应用系列(一)的更多相关文章
- MongoDB集群与LBS应用系列(二)--与Hadoop集成
长期以来,我每开个系列,只有兴趣写一篇,很难持之与恒.为了克服这个长久以来的性格弱点,以及梳理工作半年的积累.最近一个月会写两篇关于Mongo在地理大数据方面的实践和应用,一篇关于推荐系统的初期准备过 ...
- mongodb系列~mongodb集群介绍与管理
mongodb 集群维护1 简介 谈谈mongodb的集群架构2 常用的维护命令 1 查看状态 sh.status() 1 version 2 shards: ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- [转]搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群—— 分片
从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出 ...
- MongoDB集群卡死问题
一年前搭了个MongoDB集群,跑得还算不错,但是有几次遇到过服务卡死的问题.处理起来已经得心应手了,拿来跟大家分享一下: 故障现象: 业务查询缓慢,而且会有连接异常: { "serverU ...
- mongodb集群安装及到现在遇到的一些问题
集群搭建 只有3台服务器,开始搭建mongodb集群里主要参照的是http://www.lanceyan.com/tech/arch/mongodb_shard1.html,端口的设置也是mongos ...
随机推荐
- API接口开发 配置、实现、测试
Yii2 基于RESTful架构的 advanced版API接口开发 配置.实现.测试 环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到 ...
- 教你发布Silverlight Bussiness Application(SQL Server 登录,局域网访问,以及使用ArcGIS Server服务需要注意的问题)
原文:教你发布Silverlight Bussiness Application(SQL Server 登录,局域网访问,以及使用ArcGIS Server服务需要注意的问题) 之前发布过Silver ...
- hdu2191 悼念512汶川大地震遇难同胞——珍惜如今,感恩生活
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 Problem ...
- jQuery选中该复选框来实现/全部取消/未选定/获得的选定值
<!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...
- SURF分析算法
SURF分析算法 一个.整体形象 这个概念是积分图像Viola和Jones建议.随机位积分图像(i.j)的值原始图象的左上角随机点(i,j)级配相应的重点领域值的总和,其数学公式如图1所看到的 ...
- 解决IIS7运行ASP提示错误:An error occurred on the server when processing the URL. Please contact the system administrator
原文:解决IIS7运行ASP提示错误:An error occurred on the server when processing the URL. Please contact the syste ...
- ShellExecute函数简单说明
平时在delphi写代码的过程中总是能遇到ShellExecute函数,于是索性将它的使用方法整理一下,由于我在微软的站点上也没能查到个详解(当然我查的中文版,俺菜嘛) ShellExecute函数原 ...
- Redis 中文入库成功,读取数据写入文件乱码问题
近期须要用到redis ,可是在编码这个问题上,纠结了非常久. 需求 :每天一个进程将中文文件入库到redis中(不定时更新) ,另外几个进程读取redis中的信息 ,并处理数据结果.使 ...
- WCF服务上应用protobuf
WCF服务上应用protobuf Web api 主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, updat ...
- 第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览OVERVIEW.TXT翻译参考(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...