MongoDB特点及功能介绍
2017-09-12 11:29
204 查看
一、MongoDB 介绍
1、基本概念
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式, MongoDB使用C++开发。
MongoDB的官方网站地址是: http://www.mongodb.org/,大家可以在此获得更详细的信息。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。
MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它是一个面向集合的,模式自由的文档型数据库。
MongoDB特点及其使用范围
MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。根据官方网站的描述, Mongo适合用于以下场景:网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
MongoDB的使用也会有一些限制,例如它不适合:
高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。<
4000
/span>
需要SQL的问题
2、对比
二、mongodb安装
1、配置yum
1$ vim /etc/yum.repos.d/mongodb.repo2
[mongodb]3
name=MongoDB Repository4
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/5
gpgcheck=06
enabled=1
2、安装
1
$ yum install mongo-10gen mongo-10gen-server
或
下载软件包mongodb-linux-x86_64-2.6.0.tgz
1
$ tar zxf mongodb-linux-x86_64-2.6.0.tgz -C /usr/local/2
$ mv /usr/local/mongodb-linux-x86_64-2.6.0 /usr/local/mongodb3
$ vim /root/.bash_profile4
PATH=$PATH:$HOME/bin:/usr/local/mongodb/bin5
$ . /root/.bash_profile
3、修改配置文件
1
$ vim /etc/mongod.conf
2
dbpath=/home/mongodb #数据库路径
3
logpath=/home/mongodb/mongod.log #日志文件路径
4
logappend=true #日志文件末尾添加(追加日志方式)
5
fork = true #在后台运行
6
port = 27017 #端口
7
#keyFile = /data/mongodb/key/key_20001 #复制集keyfile文件
8
pidfilepath = /home/mongodb/mongod.pid #pid文件路径
9
#master = true #指定为主机器,如果是从则为slave = true
10
source = 127.0.0.1 #指定主机器的IP地址,如果是主source =127.0.0.1
11
auth = true #用户验证
12
directoryperdb = true #单独数据库目录
13
#slavedelay= 10 #从库配置,指从复制检测的时间间隔
14
#replSet = rsmongo #复制集名称
15
directoryperdb = true #创建数据目录
16
#bind_ip = 10.25.36.20 #绑定IP
4、启动mongodb
1$ mongod -f /etc/mongod.conf2
或3
$ mongod --config=/etc/mongod.conf
三、mongodb 主备搭建(目前常用复制集代替主备)
前提确保防火墙开通1、主机器(master)
1
master: 172.16.101.251
2
mongodb home: /home/mongodb
3
data file: /home/mongodb
4
log file: /home/mongodb
2、从机器(slave)
1slave: 172.16.101.2442
mongodb home: /home/mongodb/3
data file: /home/mongodb4
log file: /home/mongodb注意:这里可以使用mongodump或者scp命令把主机器的mongodb的所有目录和文件远程拷贝到从机器上去,之前不要去启动,主机器,否则启动从的时候会报错
(在日志文件中可以看到错误:mongodb ERROR: Client::~Client _context should be null but is not;client:replslave)
这样的话, 只需要把数据文件data目录下的所有文件删除,重新启动即可
3、修改配置文件
1
master: 172.16.101.251
2
logpath=/home/mongodb/mongod.log
3
logappend=true
4
fork = true
5
port = 27017
6
dbpath=/home/mongodb
7
pidfilepath = /home/mongodb/mongod.pid
8
source = 127.0.0.1
9
master = true
10
slave: 172.16.101.244
11
logpath=/home/mongodb/mongod.log
12
logappend=true
13
fork = true
14
port = 27017
15
dbpath=/home/mongodb
16
pidfilepath = /home/mongodb/mongod.pid
17
slave = true
18
source = 10.0.0.39
19
slavedelay= 10
20
oplogSize=2048 #同步操作记录文件大小(MB)
21
smallfiles=true #使用较小的默认文件
4、启动
启动master1
$ mongod --fork --config=/etc/mongod.conf启动slave
1
$ mongod --fork --config=/etc/mongod.conf
5、测试
1master: 172.16.101.2512
use testdb;3
db.createCollection('replicationColletion', {'capped':true, 'size':10240,4
5
6
slave: 172.16.101.2447
show dbs; #是8
use testdb;9
show tables; #是
四、常用命令
1
1. use database; #创建一个数据库或进入一个数据库
2
2. db.dropDatabase(); #删除当前所在的数据库
3
3. show dbs; #查看所有数据库
4
4. db; #查看当前所在的数据库
5
5. db.createCollection('replicationColletion', {'capped':true, 'size':10240,
6
db. replicationColletion.save(userInfo); #插入数据
7
db.replicationColletion.find(); #
8
或 db. replicationColletion.save({ "name" : "ysb" , "age" : "20"}) #直
9
6. db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
10
7. db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}},
11
8. db.users.remove({age: 132}); #删除数据
12
9. db.replicationColletion.drop() #删除集合
13
10. show collections #查看集合
14
11. db.replicationColletion.count() #查看集合中数据数量
15
12. db.getCollection("replicationColletion") #查看指定名称的聚集
16
13. show tables; #查看库下所有表 (集合)
17
14. db. replicationColletion.stats(); #查看一个集合的状态
18
>db.crashinfo.stats();
19
{
20
"ns" : "mobo.crashinfo", #集合的名称
21
"count" : 634, #集合中的数量
22
"size" : 726784, #集合中数据占用空间大小,,不包括
23
"avgObjSize" : 1146.3470031545742, #平均对象
24
"storageSize" : 1740800, #给整个集合分配的存储空
25
"numExtents" : 4, #连续分配的数据块
26
"nindexes" : 1, #索引个数,每个集合至少有一个
27
"lastExtentSize" : 1310720, #最近分配的块的大小
28
"paddingFactor" : 1,
29
"systemFlags" : 1,
30
"userFlags" : 0,
31
"totalIndexSize" : 32704, #所有索引大小总和
32
"indexSizes" : { #列出集合的所有索引字段,以及索引大
33
"_id_" : 32704
34
},
35
"ok" : 1
36
}
37
15. db.printCollectionStats(); #查看当前所有集合状态
38
16. db. replicationColletion.totalSize(); #查看聚集集合总大小
39
17. db. replicationColletion.storageSize(); #查看聚集集
40
18. db.themes.find({themeId: {$in: [8,9]}},{packageFile:true});
41
19. db.system.users.find(); #查看系统下所有用户
42
20. db.addUser('user_reader','123',false); #添加用户,
43
21. db.auth("user_reader","123"); #认证用户
44
22. db.removeUser("userName"); #删除用户
45
23. mongodump -h 10.60.145.18 -d anthcraft -o /home #备份数据库
46
24. mongorestore –drop #恢复数据库
47
25. db.counters.save({"model" : "apkunikey","_id" : ObjectId("
48
26. db.counters.validate() #验证集合有效性
49
27. mongodump --db mobo --collection statistics --query '{"stime":"2014
50
28. db.shutdownServer() #关闭
51
29. db.printSlaveReplicationInfo() #查看slave同步状态
52
30. db.printReplicationInfo() #查看repli同步状态
五、优化器Profiler
10:不开启2
1:记录慢查询3
2:记录所有命令4
5
6
>db.getProfilingLevel()7
08
>9
{ "was" : 0, "slowms" : 100, "ok" : 1 }10
11
12
查询profiler记录13
>db.system.profile.find( { millis : { $gt : 1 } } ) #时间大14
>db.system.profile.find().sort({$natural:-1}).limit(1) #最新产15
explain查看执行计划16
>db.themes.find({themeId: {$in: [8,9]}},{packageFile:true}) .explain()
六、问题定位
1
>db.currentOp(true) #查看当前活动进程
2
"opid" : 46271161, #操作进程号
3
"active" : true,
4
"secs_running" : 3448,
5
"op" : "none", #操作类型(查新、更新)
6
"ns" : "local.sources", #查看哪个集合
7
"query" : { #具体查询内容
8
},
9
"desc" : "replslave",
10
"threadId" : "0x7f330e4ed700",
11
"waitingForLock" : false,
12
"numYields" : 0,
13
"lockStats" : {
14
"timeLockedMicros" : {
15
"R" : NumberLong(0), #-1代表读锁,0代表无所,1代表写锁
16
"W" : NumberLong(110330)
17
},
18
"timeAcquiringMicros" : {
19
"R" : NumberLong(0),
20
"W" : NumberLong(2266)
21
>db.killOp() #结束进程
七、复制集
1仲裁库19:2
主库20:3
从库21:4
从库175:5
----------------------------------------------------------------------------6
[root@NJ-36.21 home]# tar zxf mongodb-linux-x86_64-2.4.8.tgz -C /usr/local/7
[root@NJ-36.21 home]# mv /usr/local/mongodb-linux-x86_64-2.4.88
/usr/local/mongodb/9
[root@NJ-36.21 home]# vi /root/.bash_profile10
PATH=$PATH:$HOME/bin:/usr/local/mongodb/bin11
[root@NJ-36.21 data]#mkdir -p /data/mongodb_20002/etc12
[root@NJ-36.21 data]#mkdir -p /data/mongodb_20002/key13
[root@NJ-36.21 etc]#cat /data/mongodb_20002/etc/mongod.conf14
dbpath=/data/mongodb_2000215
logpath=/data/mongodb_20002/mongod.log16
pidfilepath = /data/mongodb_20002/mongod.pid17
keyFile = /data/mongodb_20002/key/key_2000218
#使用openssl生成key文件: openssl rand -base64 74119
>/data/mongodb_20002/key/key_2000220
#修改权限: chmod 300 /data/mongodb_20002/key/key_2000221
#官网上的是600的,必须要改为300,如果不是的话,会在启动的时候mongodb.log里写权限太开放的22
#拷贝key文件,保证所有节点都一致23
auth = true24
logappend=true25
fork = trueLast update: 2015/03/11 08:53 7/8 一、 MongoDB 介绍26
CYou DBA 安全等级:保密 Printed on 2015/04/09 12:0827
port = 2000228
#source = 127.0.0.129
replSet = rsmongo30
directoryperdb = true31
32
33
启动:34
[root@NJ-36.19 mongodb_20000]# mongod --fork35
--config=/data/mongodb_20002/etc/mongod.conf36
登入:37
[root@NJ-36.19 mongodb_20000]# mongo --port 2000038
39
40
主上操作:41
[root@NJ-36.20 mongodb_20001]#mongo --port 2000142
>cfg_rsmongo = { _id:"rsmongo", members:[43
{_id:0,host:'10.25.36.20:20001',priority:2},44
{_id:1,host:'10.25.36.21:20002',priority:1},45
{_id:2,host:'10.25.36.175:20003',priority:1},46
{_id:3,host:'10.25.36.19:20000',arbiterOnly:true}]47
};48
49
50
>rs.initiate(cfg_rsmongo);51
查看状态:52
>rs.status();53
>rs.isMaster();54
使从库可读:55
rsmongo:SECONDARY>show tables;56
Tue May 6 15:08:53.224 error: { "$err" : "not master and slaveOk=false",57
58
59
rsmongo:SECONDARY>db.getMongo().setSlaveOk();60
61
62
切换测试:63
杀掉主库:64
[root@NJ-36.20 mongodb_20001]#ps -ef | grep mongo65
root 23159 1 0 14:31 ? 00:00:40 mongod --fork --config=/data66
root 25434 21787 0 15:40 pts/0 00:00:00 grep mongo67
[root@NJ-36.20 mongodb_20001]#kill -2 2315968
观察仲裁日志: 175替换为主库69
tail -f mongod.log70
Tue May 6 15:42:40.118 [initandlisten] connection accepted from71
Tue May 6 15:42:50.844 [conn283] end connection 10.25.36.20:23601 (272
Tue May 6 15:42:52.043 [rsHealthPoll] DBClientCursor::init call() failed73
Tue May 6 15:42:52.069 [rsHealthPoll] replset info 10.25.36.20:2000174
Tue May 6 15:42:52.070 [rsHealthPoll] replSet info 10.25.36.20:20001 is75
Tue May 6 15:42:52.070 [rsHealthPoll] replSet member 10.25.36.20:20001 is76
Tue May 6 15:42:52.402 [conn284] replSet info voting yea for 10.25.36.175:77
Tue May 6 15:42:54.045 [rsHealthPoll] replSet member 10.25.36.175:20003 is78
Tue May 6 15:42:54.072 [rsHealthPoll] replset info 10.25.36.20:2000179
Tue May 6 15:42:56.073 [rsHealthPoll] replset info 10.25.36.20:2000180
当主库恢复时:会自动切换回去81
Tue May 6 15:44:10.164 [conn288] end connection 10.25.36.175:40253 (282
Tue May 6 15:44:10.164 [initandlisten] connection accepted from83
Tue May 6 15:44:18.088 [rsHealthPoll] replSet member 10.25.36.175:20003 is84
Tue May 6 15:44:18.088 [rsMgr] stepping down 10.25.36.175:20003 (priority 1),85
Tue May 6 15:44:18.096 [rsMgr] stepping down 10.25.36.175:20003 failed: {86
Tue May 6 15:44:24.763 [conn289] replSet info voting yea for 10.25.36.20:87
Tue May 6 15:44:28.161 [rsHealthPoll] replSet member 10.25.36.20:20001 is
八、添加新节点
1两种方式:
2
3
4
一、直接运用oplog复制数据
5
1.装好mongo软件,配置好参数,启动
6
2.在primary上执行添加操作 rs.add("10.25.36.25:20004")
7
3.查看状态rs.status()
8
这种方式简单方便,但是需要注意它只根据oplog同步,如果oplog将之前的数据覆盖将不能同步恢复,
9
10
11
二、先拷贝物理文件,在恢复
12
1.需要停机,如果数据量较小可以不停机
相关文章推荐
- Mongodb主要功能特点
- mongoDB 介绍(特点、优点、原理)
- ERC功能模块特点介绍
- mongoDB 介绍(特点、优点、原理)
- mongoDB 介绍(特点、优点、原理)
- mongoDB 介绍(特点、优点、原理)
- 03.NopCommerce功能与特点介绍
- 介绍一下UML的主要功能及其特点
- mongoDB 介绍(特点、优点、原理)
- mongoDB 介绍(特点、优点、原理)
- mongoDB 介绍(特点、优点、原理)
- Kylin介绍,功能特点【转】
- MongoDB学习整理(二)--特点及概念介绍
- mongoDB 介绍(特点、优点、原理)
- NopCommerce功能与特点介绍
- mongoDB 介绍(特点、优点、原理)
- mongoDB 介绍(特点、优点、原理)
- Elasticsearch的功能、特点介绍
- 数据库的自我修炼——阿里云MongoDB备份恢复功能说明和原理介绍
- mongoDB 介绍(特点、优点、原理)