安装与配置MongoDB数据,供大家学习参考。
1. Mongodb介绍
1.1 MongoDB (名称来自”humongous”) 是一个可扩展的,高性能,开源,模式自由,面向文档的数据库,使用C++编写;以下是MongoDB特点:
1.1.1 面向集合的存储:适合存储对象及JSON形式的数据。
1.1.2 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
1.1.3 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
1.1.4 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
1.1.5 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
1.1.6 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
1.1.7 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。
1.2 MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。根据官方网站的描述,Mongo适合用于以下场景:
1.2.1 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
1.2.2 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
1.2.3 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
1.2.4 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
1.2.5 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
1.3 自然,MongoDB的使用也会有一些限制,例如它不适合:
1.3.1 高度事务性的系统:例如银行或会计系统。传统的关系型数据库更适用于需要大量原子性复杂事务的应用程序。
1.3.2 传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式,数据仓库可能是更合适的选择。
1.3.3 需要SQL的问题。
2. Mongodb安装部署
2.1 建立数据目录和日志目录
$ sudo mkdir -p /opt/mongodb/data
$ sudo mkdir -p /opt/mongodb/log
$ sudo mkdir -p /opt/mongodb/etc
$ sudo mkdir -p /opt/mongodb/run
2.2 下载压缩包
$ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.2.0.tgz
2.3 解压缩文件后不用安装
$ tar xzvf mongodb-linux-x86_64-2.2.0.tgz
$ sudo mv mongodb-linux-x86_64-2.2.0/bin /opt/mongodb/
2.4 查看命令help
$ /opt/mongodb/bin/mongod --help
以下是部分参数的解释:
General options:
--dbpath arg directory for datafiles #指定数据存放目录
--quiet quieter output #静默模式
--logpath arg file to send all output to instead of stdout #指定日志存放目录
--logappend appnd to logpath instead of over-writing #指定日志是以追加还是以覆盖的方式写入日志文件
--fork fork server process #以创建子进程的方式运行
--cpu periodically show cpu and iowait utilization #周期性的显示cpu和io的使用情况
--noauth run without security #无认证模式运行
--auth run with security #认证模式运行
--objcheck inspect client data for validity on receipt #检查客户端输入数据的有效性检查
--quota enable db quota management #开始数据库配额的管理
--quotaFiles arg number of files allower per db, requires --quota #规定每个数据库允许的文件数
--nocursors diagnostic/debugging option #调试诊断选项
--nohints ignore query hints #忽略查询命中率
--nohttpinterface disable http interface #关闭http接口,默认是28017
--noscripting disable scripting engine #关闭脚本引擎
--noprealloc disable data file preallocation #关闭数据库文件大小预分配
--smallfiles use a smaller default file size #使用较小的默认文件大小
--nssize arg (=16) .ns file size (in MB) for new databases #新数据库ns文件的默认大小
--diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads #提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式
--sysinfo print some diagnostic system information #打印系统诊断信息
--upgrade upgrade db if needed #如果需要就更新数据库
--repair run repair on all dbs #修复所有的数据库
--notablescan do not allow table scans #不运行表扫描
--syncdelay arg (=60) seconds between disk syncs (0 for never) #系统同步刷新磁盘的时间,默认是60s
Replication options:
--master master mode #主复制模式
--slave slave mode #从复制模式
--source arg when slave: specify master as <server:port> #当为从时,指定主的地址和端口
--only arg when slave: specify a single database to replicate #当为从时,指定需要从主复制的单一库
--arbiter arg address of arbiter server #仲裁服务器,在主主中和pair中用到
--autoresync automatically resync if slave data is stale #自动同步从的数据
--oplogSize arg size limit (in MB) for op log #指定操作日志的大小
--opIdMem arg size limit (in bytes) for in memory storage of op ids #指定存储操作日志的内存大小
Sharding options:
--configsvr declare this is a config db of a cluster #指定shard中的配置服务器
--shardsvr declare this is a shard db of a cluster #指定shard服务器
2.5 创建MongoDB配置文件:
$ sudo vim /opt/mongodb/etc/mongod.conf
# mongod.conf
# Where to store the data.
# Note: if you run mongodb as a non-root user (recommended) you may
# need to create and set permissions for this directory manually,
# e.g., if the parent directory isn't mutable by the mongodb user.
dbpath=/opt/mongodb/data
# Where to log
logpath=/opt/mongodb/log/mongodb.log
logappend=true
# The pid file
pidfilepath=/opt/mongodb/run/mongod.pid
# The port number
port = 27017
# Fork server process
fork=true
# Disables write-ahead journaling
#nojournal = true
# Enables periodic logging of CPU utilization and I/O wait
#cpu = true
# Turn on/off security. Off is currently the default
#noauth = true
#auth = true
# Verbose logging output.
#verbose = true
# Inspect all client data for validity on receipt (useful for
# developing drivers)
#objcheck = true
# Enable db quota management
#quota = true
# Set oplogging level where n is
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#diaglog = 0
# Ignore query hints
#nohints = true
# Disable the HTTP interface (Defaults to localhost:27018).
#nohttpinterface = true
# Turns off server-side scripting. This will result in greatly limited
# functionality
#noscripting = true
# Turns off table scans. Any query that would do a table scan fails.
#notablescan = true
# Disable data file preallocation.
#noprealloc = true
# Specify .ns file size for new databases.
# nssize = <size>
# Accout token for Mongo monitoring server.
#mms-token = <token>
# Server name for Mongo monitoring server.
#mms-name = <server-name>
# Ping interval for Mongo monitoring server.
#mms-interval = <seconds>
# Replication Options
# In master/slave replicated mongo databases, specify here whether
# This is a slave or master
#slave = true
#source = master.example.com
# Slave only: specify a single database to replicate
#only = master.example.com
# or
#master = true
#source = slave.example.com
# In replica set configuration, specify the name of the replica set
#replSet = setname
2.6 创建服务脚本,方便维护:
$ sudo vim /etc/init.d/mongod
#!/bin/sh
HOME="/opt/mongodb"
PATH="$HOME/bin:$PATH"
EXEC="$HOME/bin/mongod"
CLIEXEC="$HOME/bin/mongo"
CONF="$HOME/etc/mongod.conf"
PIDFILE="/opt/mongodb/run/mongod.pid"
case "$1" in
start)
if [ -f $$PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed."
else
echo "Starting MongoDB server..."
$EXEC --config $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running."
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC admin --eval "db.shutdownServer()"
while [ -x /proc/${PID} ]
do
echo "Waiting for MongoDB to shutdown ..."
sleep 1
done
echo "MongoDB stopped."
fi
;;
*)
echo "Usage: $0 {start|stop}" >&2
exit 1
;;
esac
$ sudo chmod +x /etc/init.d/mongod
2.7 启动服务
$ sudo /etc/init.d/mongod start
查看log可以看到配置文件中定义的启动参数都已经生效。
$ tailf /opt/mongodb/log/mongodb.log
Fri Sep 28 16:40:32 [initandlisten] MongoDB starting : pid=2372 port=27017 dbpath=/opt/mongodb/data 64-bit host=mongodb
Fri Sep 28 16:40:32 [initandlisten] db version v2.2.0, pdfile version 4.5
Fri Sep 28 16:40:32 [initandlisten] git version: f5e83eae9cfbec7fb7a071321928f00d1b0c5207
Fri Sep 28 16:40:32 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Fri Sep 28 16:40:32 [initandlisten] options: { config: "/opt/mongodb/etc/mongod.conf", dbpath: "/opt/mongodb/data", fork: "true", logappend: "true", logpath: "/opt/mongodb/log/mongodb.log", pidfilepath:
"/opt/mongodb/run/mongod.pid", port: 27017 }
Fri Sep 28 16:40:32 [initandlisten] journal dir=/opt/mongodb/data/journal
Fri Sep 28 16:40:32 [initandlisten] recover : no journal files present, no recovery needed
Fri Sep 28 16:40:33 [initandlisten] waiting for connections on port 27017
Fri Sep 28 16:40:33 [websvr] admin web console waiting for connections on port 28017
2.8 使用自带客户端连接
$ /opt/mongodb/bin/mongo
2.9 关闭Mongod
$ sudo /etc/init.d/mongod stop
3 体验MongoDB
3.0.1 新建集合集
> db.createCollection("user");
{ "ok" : 1 }
> show collections
system.indexes
user
3.0.2 插入数据:
> db.user.insert({uid:1,username:"Falcon.C",age:25});
> db.user.insert({uid:2,username:"aabc",age:24});
3.0.3 查询数据:
> db.user.find();
{ "_id" : ObjectId("4bfcaa62315398de2d288bbd"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }
{ "_id" : ObjectId("4bfcaa6c315398de2d288bbe"), "uid" : 2, "username" : "aabc", "age" : 24 }
3.0.4 查询数据的方式很丰富,有类似于SQL的条件查询
如:我想查询UID为1的用户的数据:
> db.user.find({uid:1});
{ "_id" : ObjectId("4bfcaa62315398de2d288bbd"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }
他还支持丰富的查询还有limit ,sort ,findOne,distinct等
3.0.5 更新数据
> db.user.find();
{ "_id" : ObjectId("4bfcaa62315398de2d288bbd"), "uid" : 1, "username" : "Falcon.C", "age" : 26 }
{ "_id" : ObjectId("4bfcaa6c315398de2d288bbe"), "uid" : 2, "username" : "aabc", "age" : 24 }
出了以上的2种用法,更新的条件还有$unset、$push 、$pushAll 、$pop 、$pull 、$pullAll
想要快速的学习的话,这里有个SQL与MongoDB语法的一对一介绍:
http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
以上就是MongoDB简单的使用介绍,在以后的文档中将会详细的介绍MongoDB非常酷的CURD方法,MongoDB的Replication及分布式。
最后,我们还可以通过浏览器查看MongoDB的状态:
打开端口为28017的网页
本文转自:http://heylinux.com