一.体系架构
1.整体架构:一个运行着的mongodb为一个mongodb服务器(server),一个服务器由一个实例和多个数据库组成,实例由一个后台进程(多个线程)和一块物理内存组成,而数据库则由数据文件和日志文件等物理文件组成.
2.逻辑架构:与关系库不同,mongodb的逻辑上为一种层次结构,主要包括文档(document),集合(collection)和数据库(database)三个层级.
1)文档:相当于关系库中的记录;
2)集合:相当于关系库中的表,可以包含多个文档;
3)数据库:相当于关系库中的数据库,可以包含多个集合.
3.数据存储:mongodb数据默认存储于/data/db目录,mongodb的所有数据文件都存储于此.每个集合都会涉及多个物理文件,随着数据库中集合和数据的增多,文件的数量和大小也会增多增大,数据具体涉及的文件类型及数目
会随着版本的不同而不同.
4.日志系统:与关系库类似,mongodb也会包含几种日志,分别为系统日志,journal日志,oplog日志,慢查询日志等,这些日志用于记录和跟踪mongodb不同方面的信息.
1)系统日志:系统日志主要记录对mongodb进行的重要操作,还有mongodb运行过程中发生的任何重要的异常信息.通过启动mongodb时或配置文件中指定logpath参数配置系统日志的路径、名字和行为.例如:
mongod --logpath=/data/db/log/mongsrv.log --logappend
2)journal日志:journal日志通过预写redo日志的方式为mongodb增加了可靠性保障.因此,一旦开启该日志,数据更新前都会先将更新写入该日志,定期提交redo日志的默认时间窗为100ms,但也可以回随版本的不同而不同.
当服务器被安全关闭时,该日志会被清除.而当服务器启动时,如果该日志非空,服务器则首先会执行和提交该日志中的更新操作.通过启动mongodb时或配置文件中指定journal参数启用或关闭该日志功能.例如:
mongodb --journal=true
journal日志的默认目录为/data/db/journal目录.
3)oplog日志:mongodb的高可用通过主从复制方式实现,master服务器会把更新写入local库的一个集合中,并将集合中的更新操作分发到从服务器中,该集合为capped collection,且可以配置大小,可通过启动mongodb时或
配置参数指定该日志的大小,单位为M.例如:
mongd --oplogsize=1024
4)慢查询日志:类似mysql,mongodb可以通过慢查询日志记录运行时间超过某个设定阀值的操作语句,同样的,可以通过启动mongodb时或配置文件开启慢查询日志和为其指定具体阀值,阀值单位为秒,例如:
mongodb --profile=1 --slowms=5
5.元数据存储:与其他数据库类似,mongodb也有专门存储元数据的系统集合.<dbname>.system.*用于存储mongodb的元数据,通过查询该类集合,我们可以获取数据对象的信息.例如:
system.namespaces;system.indexes;system.profile;system.users;local.sources.
6.数据类型:mongodb采用JSON键值对存储各种数据,其支持的数据类型主要包括:null,boolean,string,symbol,object id,date,regular expression,code,array,embedded document.
二.安装与配置
1.for windows
1)下载mongodb for windows64
https://www.mongodb.com/download-center/enterprise
2)解压:将下载软件解压或安装于磁盘某个目录,例如:d:\mongo_win64
3)创建数据目录
创建一个用于存放mongodb数据文件的磁盘目录,例如:d:\mgodata\db
4)启动mongodb
d:\mongo_win64\bin\mongd --dbpath=d:\mgodata\db
--mongodb服务器默认端口为27017
5)将mongodb设置为windows服务并开启启动
--创建mongodb日志目录d:\mgodata\db
--创建windows服务
d:\mongo_win64\bin\mongod --dbpath=d:\mgodata\db --logpath=d:\mgodata\db\log\ --install
--启动mongodb服务
c:\net start mongodb
--客户端连接测试
d:\mongo_win64\bin\mongo
>
--查看mongodb日志文件d:\mgodata\db\log\mongodb.log,确认mongodb启动和运行正常.
2.for linux
1)下载mongodb for linux64
https://www.mongodb.com/download-center/enterprise
2)解压:将mongodb安装包解压至某个目录,例如:/usr/local/mongodb_linux64
3)创建mongodb数据文件目录
# mkdir -p /mgodata/db/
4)启动mongodb
# /usr/local/mongodb/bin/mongod --dbpath=/mgodata/db/
--mongodb服务器默认端口为27017.
5)设置mongodb随linux系统启动
--创建mongodb日志目录
# mkdir -p /mgodata/db/log
--设置mongodb为随linux自动启动,编辑/etc/rc.local,并将下面命令添加并保存.
# vi /etc/rc.local
--将下属命令添加至rc.local并保存.
/usr/local/mongodb/bin/mongod --dbpath=/mgodata/db --logpath=/mgodata/db/log/mongodb.log
6)客户端连接测试
# /usr/loca/mongodb/bin/mongo
>
7)查看mongodb日志文件/mgodata/db/log/mongodb.log,确认mongodb启动和运行正常.
三.启动mongodb
1.命令行
# /usr/local/mongodb/bin/mongod --dbpath=/mgodata/db
2.配置文件
# vi /etc/mongodb.cnf
dbpath=/mgodata/db
logpath=/mgodata/db/log/mongodb.log
logappend=true
fork=true
# cd /usr/loca/mongodb/bin/
# ./mongod -f /etc/mongodb.cnf
3.daemon方式
--前两种方式中,一旦启动mongodb的命令窗口关闭,mongodb也就随即停止,daemon方式就可以避免前两种启动方式的这种问题,例如:
# /usr/local/mongodb/bin/mongod --dbpath=/mgodata/db --logpath=/mgodata/db/log/mongodb.log --fork
4.mongd参数方式
该方式通过mongod启动时指定相应参数,从而达到配置和管理mongodb的目的.
四.停止数据库
1.ctrl+c组合键
如果以特权用户连接mongodb实例,可以通过ctrl+c组合键停止当前连接实例.
# /usr/local/mongodb/bin/mongo --port 27017
> use db_test
> ctrl+c
2.shutdownServer()命令
# /usr/local/mongodb/bin/mongo --port 27017
> use admin
> db.shutdownServer();
3.unix指令
# ps -ef|grep mong
# kill -2 mongodb_pid
# kill -15 mongodb_pid
五.操作mongodb
1.连接数据库
# /usr/local/mongodb/bin/mongo --port 27018
> use db_test;
>
2.插入记录
# /usr/local/mongodb/bin/mongo --port 27018
> use db_test;
> a={x:"aaaaa"};
> b={y:"bbbbb"};
> db.colt1.save(a);
> db.colt1.save(b);
> db.colt1.find();
> for(var i=1;i<10;i++) db.colt1.save(x:i+1,y:i*10);
> db.colt1.find();
--结果未完全显示
> it;
> db.colt1.insert({_id:11,x:"mongodb",y:"nosql"});
> db.colt1.insert({name:"john",age:44});
3.查询记录
1)普通查询
# /usr/local/mongodb/bin/mongo --port 27018
--用游标
> var c1=db.colt.find();
> while (c1.hasNext()) printjson(c1.next());
--用forEach
> db.colt1.find().forEach(printjson);
--游标当数组
> var c1=db.colt1.find();
> printjson.(c1[4]);
--用数组
> var ary=db.colt1.find();
> ary[4];
2)条件查询
# /usr/local/mongodb/bin/mongo --port 27018
--查找并显示x=5的文档
> db.colt1.find({x:5}).forEach(printjson);
>db.colt1.find({x:5},{j:true}).forEach(printjson);
3)findone()语法
# /usr/local/mongodb/bin/mongo --port 27018
--查找并显示name="john"的文档
>printjson(db.colt1.findone({name:"john"}));
4)limit语法
# /usr/local/mongodb/bin/mongo --port 27018
--只显示前三行结果文档
> db.colt1.find().limt(3);
4.修改记录
# /usr/local/mongodb/bin/mongo --port 27018
--将name="john"的文档name更新为"rose"
> db.colt1.update({name:"john"},{$set:{name:"rose"}});
> db.colt1.find();
5.删除记录
# /usr/local/mongodb/bin/mongo --port 27018
--删除name="rose"的文档
> db.colt1.remove({name:"rose"});
> db.colt1.find();
六.管理工具
1.MongoVUE:该工具提供了对mongodb的基本操作,例如:查看,查询,更新,删除等.
2.RockMongdo:该工具为PHP开发的一款管理工具,同样,也可以执行查询,创建和删除等操作,此外,还可以运行命令和js代码.
3.MongoHub:该工具为针对MAC平台的一款GUI.