MongDB

MongoDB 是由C++语言编写的,基于分布式文件存储的开源数据库系统。是开源的、面向文档的NoSQL(Not Only SQL)数据库,也是当前最热门的NoSql数据库之一。

在高负载的情况下,添加更多的节点,可以保证服务器性能。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富的。支持的数据结构非常松散,是类似json的bjson格式,可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

NoSQL的产生就是为了解决大数据量、高扩展性、高性能、灵活数据模型、高可用性。

NoSQL背景

解决在Web2.0时代出现的三高要求:

l   对数据库高并发读写的需求

l   对海量数据的高效率存储和访问的需求

l   对数据库的高可扩展性和高可用性的需求

而RDB里面的一些特性,在web2.0里面往往变得不那么重要,比如: 

l   数据库事务一致性

l   数据库的实时读写

l   复杂的SQL查询,特别是多表关联查询

CAP定理

一个分布式计算系统来说,不可能同时满足以下三点:

l   强一致性(Consistency):系统在执行某项操作后数据状态仍然处于一致,例如在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有强一致性。

l   可用性(Availability):每一个操作总是能够在一定的时间内返回结果

l   分区容错性(Partitiontolerance):单个节点故障不应导致整个系统崩溃,也就是说尽管网络在节点之间丢弃(或延迟)任意数量的消息,但是系统继续操作。

根据CAP原理将数据库分成了满足CA原则、满足CP原则和满足AP原则三大类

l   CA:单点集群,满足一致性,可用性,通常在可扩展性上不太强大,比如RDB

l   CP:满足一致性和分区容错性,通常性能不是特别高,如分布式数据库

l   AP:满足可用性和分区容错性,通常可能对一致性要求低一些,如大多数的NoSQL

概念

副本集(replica set)

MongoDB在1.6版本的基础上开发了新功能replicaset,增加了故障自动切换和自动修复成员节点,各个DB之间数据完全一致,降低了维护成本。auto shared已经明确说明不支持replication Paris,建议使用replica set故障切换。

replica sets的结构类似一个集群,其中一个节点出现故障,其他节点马上回将业务接过来而无需停机操作。

MongoDB的replica set是一个mongod进程实例簇,数据在这个簇中相互复制,并自动进行故障切换。

MongoDB的数据库复制增加了冗余,确保了高可用性,简化了管理任务如备份,并且增加了读能力。大多数产品部署都使用了复制。MongoDB中primary处理写操作,其它进行复制的成员则是secondaries。

下载地址

http://www.mongodb.org/downloads

安装使用

解压:

# tar -xvfmongodb-linux-x86_64-rhel70-3.4.6.tgz

cd mongodb-linux-x86_64-rhel70-3.4.6

已有二进制文件可以直接运行。

创建数据库文件夹与日志文件

mkdir data

mkdir log

启动:

/root/mongodb-linux-x86_64-rhel70-3.4.6/bin/mongod--dbpath=/root/mongodb-linux-x86_64-rhel70-3.4.6/data --logpath=/root/mongodb-linux-x86_64-rhel70-3.4.6/logs--logappend  --auth --port=27017 --fork

PS:配置文件bin/mongodb.conf,配置文件起作用,启动时候加入如下参数--config

内容如下:

dbpath= /root/mongodb-linux-x86_64-rhel70-3.4.6/data

logpath= /root/mongodb-linux-x86_64-rhel70-3.4.6/logs

logappend= true

port =27017

fork =true

auth = true

启动就变成了:

#/root/mongodb-linux-x86_64-rhel70-3.4.6/bin/mongod-f mongo.conf

或者

#/root/mongodb-linux-x86_64-rhel70-3.4.6/bin/mongod--config mongo.conf

客户端CLI只要执行如下:

cd到mongodb目录下的bin文件夹,执行命令./mongo

就可以执行命令:

例如

>show dbs

admin  0.000GB

local 0.000GB

常用参数解释

--dbpath 数据库路径(数据文件)

--logpath 日志文件路径

--master 指定为主机器

--slave 指定为从机器

--source 指定主机器的IP地址

--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。

--logappend 日志文件末尾添加

--port 启用端口号

--fork 在后台运行

--only 指定只复制哪一个数据库

--slavedelay 指从复制检测的时间间隔

--auth 是否需要验证权限登录(用户名和密码)

问题

l   "No host described in new configuration 1 forreplica set mongod maps to this node"

答:将主机名字加入到/etc/hosts中

例如

127.0.0.1 hostname

l   not authorized on admin to execute command

启动时去掉--auth认证即可。