mongodb和redis场景使用不同的原因、日志文件类型、数据类型、元素命名规则、基本操作、数据插入与查询操作、数据备份与恢复、安全管理、角色管理、进程管理、监控管理、mongodb复制集集群管理

文章对比了MongoDB和Redis在不同场景下的使用,如高TPS需求选择Redis,大数据量复杂查询使用MongoDB。介绍了MongoDB的数据文件、日志类型、数据类型以及命名规则,并展示了基本操作,如插入、查找、删除和排序。此外,还涵盖了数据备份恢复、角色管理、进程管理和监控管理等运维操作。
摘要由CSDN通过智能技术生成

目录

一、mongodb和redis场景使用不同的原因

二、mongodb数据文件类型

三、日志文件类型

四、数据类型

五、元素命名规则

六、mongodb基本操作

1.、db.list.insert({"id":103,"name":"诸葛亮","age":1000,"dept":"行政部"})

2、 db.list.find({"name":"诸葛亮"})  

3、db.list.remove({"name":"诸葛亮"})

4、db.list.find().sort({age:1}).limit(10)

5、db.list.find().skip(10).limit(5)

6、 db.list.find({"age":20},{"name":1,"age":1})

7、db.list.find({"age":{$gt:60}})

8、 db.list.find({"age":{$lt:20}})

9、db.list.find({"age":{$mod:[10,1]}})

10、db.list.find({"dept":"会计部"})

11、db.list.find({"dept":{"$in":["会计部","客服部"]}})

12、db.list.find({name:/^张/})

13、db.list.find({$or:[{"age":{$gt:60}},{"age":{$lt:20}}]}).sort({age:1})

八、数据备份与恢复

1.备份

2.恢复

九、角色管理

十、进程管理 

十一、监控管理

十二、复制集管理

1.修改oplog的大小:100MB

2.部署复制集群以密钥认证,其他登录需要密码认证


一、mongodb和redis场景使用不同的原因

现在的分布式项目基本都会用到redis和mongodb,redis和mongdb有什么不同
首先这个项目中有两种应用场景:
场景一:要求TPS(每秒事务数)特别高的,比如项目有一个点赞的功能,这个点赞的功能促发频率特别高,而且并发量也会特别大,但是它的数据量不会特别大。基于这种情况下,我们采用redis来实现点赞功能。
场景二:项目中涉及评论的内容,而且这个评论表的数据后期会非常大(海量的数据),最后在数据量非常大的情况下还要求比较复杂的查询。基于上述这些情况,我们采用mongodb作为评论表存储数据库。

场景三:推送、评论、用mongodb ,目前是百万级的数据,将来会有千万级、亿级。

场景四:直播评论用redis,当时是用来存储一些热数据,量也不大,但是操作很频繁

数据量大的时候通常用mongodb,数据量小但TPS高通常用redis。

二、mongodb数据文件类型

[root@localhost ~] ll -ht /data/mongodb1
总用量 1.3G
drwx------. 2 root root 4.0K 7月   5 09:23 diagnostic.data
-rw-------. 1 root root 1.0G 7月   5 09:23 local.1
-rw-------. 1 root root  16M 7月   5 09:23 local.ns
-rw-------. 1 root root  64M 7月   5 09:06 config.0
-rw-------. 1 root root  16M 7月   5 09:06 config.ns
drwx------. 2 root root   29 7月   5 09:03 journal
-rw-------. 1 root root  64M 7月   5 09:02 local.0
-rw-------. 1 root root    6 7月   5 09:01 mongod.lock
-rw-------. 1 root root  64M 7月   4 19:16 admin.0
-rw-------. 1 root root  16M 7月   4 19:16 admin.ns
-rw-------. 1 root root   69 7月   4 18:22 storage.bson

三、日志文件类型

[root@localhost ~] ll -ht /data/logs/mongodb/mongodb1.log
#系统日志
-rwxrwxrwx. 1 root root 483K 7月   5 09:21 /data/logs/mongodb/mongodb1.log
#journal日志
[root@localhost ~] ll -ht /data/mongodb1/journal/
总用量 1.2M
-rw-------. 1 root root 1.2M 7月   5 09:26 j._0
-rw-------. 1 root root   88 7月   5 09:26 lsn

四、数据类型

 

五、元素命名规则

数据库名可以是满足以下条件的任意UTF-8字符串。

  1. 不能是空字符串("")。
  2. 不得含有' '(空格)、.、$、/、\和\0 (空字符)。
  3. 应全部小写。
  4. 最多64字节。

集合命名规范:

  1. 集合名不能是空字符串""。
  2. 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
  3. 集合名不能以"system."开头,这是为系统集合保留的前缀。
  4. 名字中间不能出现$。

文档键命名规范:

  1. 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
  2. .和$有特别的意义,只有在特定环境下才能使用。
  3. 以下划线"_"开头的键是保留的(不是严格要求的)。

六、mongodb基本操作

操作

作用

show dbs

查看当前示例下的数据库列表,等同于show databases

show users

显示用户

use <db_name>

切换当前数据库

db.help()

显示数据库操作命令

show collections

显示当前数据库中的集合,等同于show tables

db.table.help()

显示集合操作命令,table是当前下叫做table的集合

db.table.find()

对当前数据库中table集合进行数据查找

 七、查询操作

导入一个模拟的.csv表

-rw-r--r--. 1 root root     2592 2月  27 17:12 list.csv

中使用mongoimport命令将一个CSV文件导入到MongoDB数据库中的指定集合中。

创建一个数据库叫cloud把csv表导入到cloud叫做list

copygroup:PRIMARY> use cloud
[root@localhost ~] /usr/local/mongodb/bin/mongoimport -d cloud -c list -f id,name,age,dept --file list.csv --type csv
2023-07-05T09:57:02.769+0800	connected to: localhost
2023-07-05T09:57:02.937+0800	imported 102 documents

[root@localhost ~] mongo
copygroup:PRIMARY> show dbs
admin   0.078GB
cloud   0.078GB
config  0.078GB
local   1.078GB
copygroup:PRIMARY> use cloud
switched to db cloud
copygroup:PRIMARY> show collections
list
copygroup:PRIMARY> db.list.find()
{ "_id" : ObjectId("64a4cdeeae6e891db7170599"), "id" : 1, "name" : "孙美伶", "age" : 57, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db717059a"), "id" : 2, "name" : "付建梅", "age" : 48, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db717059b"), "id" : 3, "name" : "刘嘉", "age" : 63, "dept" : "市场部" }
{ "_id" : ObjectId("64a4cdeeae6e891db717059c"), "id" : 4, "name" : "刘晓慧", "age" : 33, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db717059d"), "id" : 5, "name" : "谢娜", "age" : 23, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db717059e"), "id" : 6, "name" : "翟迪", "age" : 27, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db717059f"), "id" : 7, "name" : "王新宇", "age" : 36, "dept" : "市场部" }
{ "_id" : ObjectId("64a4cdeeae6e891db71705a0"), "id" : 8, "name" : "闫金花", "age" : 41, "dept" : "教师部" }
{ "_id" : ObjectId("64a4cdeeae6e891db71705a1"), "id" : 9, "name" : "曹铮铮", "age" : 52, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db71705a2"), "id" : 10, "name" : "杨雪飞", "age" : 44, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db71705a3"), "id" : 11, "name" : "蔡明珠", "age" : 22, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db71705a4"), "id" : 12, "name" : "刘海霞", "age" : 35, "dept" : "会计部" }
{ "_id" : ObjectId("64a4cdeeae6e891db71705a5"), "id" : 13, "name" : "郭占芳", "age" : 45, "dept" : "教师部" }
1.、db.list.insert({"id":103,"name":"诸葛亮","age":1000,"dept":"行政部"})

    插入以上内容

copygroup:PRIMARY> db.list.insert({"id":103,"name":"诸葛亮","age":1000,"dept":"行政部"})
WriteResult({ "nInserted" : 1 })  #写入了一行内容
2、 db.list.find({"name":"诸葛亮"})  

查找以上内容

3、db.list.remove({"name":"诸葛亮"})

删除以上内容

4、db.list.find().sort({age:1}).limit(10)

排序,按年龄从小到大(age:-1为从大到小),前十个

5、db.list.find().skip(10).limit(5)

查看list表,跳过前十个,查看后面五个

6、 db.list.find({"age":20},{"name":1,"age":1})

查看20岁的,只显示名字和年龄参数

7、db.list.find({"age":{$gt:60}})

查看年龄大于60的

8、 db.list.find({"age":{$lt:20}})

查看年龄小于20的 

9、db.list.find({"age":{$mod:[10,1]}})

查看年龄除以10余1的 (11 21 31 41......)

10、db.list.find({"dept":"会计部"})

查看含会计部的行

11、db.list.find({"dept":{"$in":["会计部","客服部"]}})

查看含会计部、客服部的行

12、db.list.find({name:/^张/})

查看张开头的行

13、db.list.find({$or:[{"age":{$gt:60}},{"age":{$lt:20}}]}).sort({age:1})

查看按年龄排序,大于60或小于20,从小到大的行

八、数据备份与恢复

1.备份
[root@localhost ~] /usr/local/mongodb/bin/mongodump -d cloud -o /backup/
[root@localhost ~] cd /backup/cloud/
[root@localhost cloud]# ll
总用量 12
-rw-r--r--. 1 root root 7986 7月   5 10:30 list.bson
-rw-r--r--. 1 root root  124 7月   5 10:30 list.metadata.json
2.恢复
[root@localhost cloud] /usr/local/mongodb/bin/mongorestore -d copygroud --dir=/backup/cloud/
2023-07-05T10:32:33.680+0800	the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2023-07-05T10:32:33.680+0800	building a list of collections to restore from /backup/cloud dir
2023-07-05T10:32:33.681+0800	reading metadata for copygroud.list from /backup/cloud/list.metadata.json
2023-07-05T10:32:33.714+0800	restoring copygroud.list from /backup/cloud/list.bson
2023-07-05T10:32:33.888+0800	no indexes to restore
2023-07-05T10:32:33.888+0800	finished restoring copygroud.list (103 documents)
2023-07-05T10:32:33.888+0800	done

[root@localhost cloud] mongo
copygroup:PRIMARY> show dbs
admin      0.078GB
cloud      0.078GB
config     0.078GB
copygroud  0.078GB   #恢复

九、角色管理

Built-In Roles(内置角色):

  1. 数据库用户角色:read、readWrite
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
  4. 备份恢复角色:backup、restore
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase dbAdminAnyDatabase
  6. 超级用户角色:root
  7. 内部角色:_system

十、进程管理 

(1)查看当前正在运行的进程:db.currentOp()

(2)杀掉当前正在运行的高消耗资源的进程:db.killOp(opid号)

十一、监控管理

查看数据库实例状态信息:db.serverStatus()

查看当前数据库统计信息:db.stats()

查看集合统计信息:db.集合.stats()

查看集合大小:db.集合.dataSize()

mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。

[root@localhost cloud] /usr/local/mongodb/bin/mongostat 
insert query update delete getmore command flushes mapped vsize   res faults qrw arw net_in net_out conn       set repl                time
    *0    *0     *0     *0       0     2|0       0        4.12G 68.0M      0 0|0 0|0   158b   33.5k   11 copygroup  PRI Jul  5 10:40:57.199
    *0    *0     *0     *0       1     6|0       0        4.12G 68.0M      0 0|0 0|0  2.12k   36.0k   11 copygroup  PRI Jul  5 10:40:58.199
    *0    *0     *0     *0       0     1|0       0        4.12G 68.0M      0 0|0 0|0   157b   33.4k   11 copygroup  PRI Jul  5 10:40:59.199

mongotop也是mongodb下的一个内置工具,mongotop提供了一个方法,用来跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下,mongotop返回值的每一秒。 

[root@localhost cloud] /usr/local/mongodb/bin/mongotop 
2023-07-05T10:39:53.511+0800	connected to: 127.0.0.1

                      ns    total    read    write    2023-07-05T10:39:54+08:00
    admin.system.indexes      0ms     0ms      0ms                             
       admin.system.keys      0ms     0ms      0ms                             
 admin.system.namespaces      0ms     0ms      0ms                             
      admin.system.roles      0ms     0ms      0ms                             
      admin.system.users      0ms     0ms      0ms                             
    admin.system.version      0ms     0ms      0ms                             
              cloud.list      0ms     0ms      0ms                             
   config.system.indexes      0ms     0ms      0ms                             
config.system.namespaces      0ms     0ms      0ms                             
  config.system.sessions      0ms     0ms      0ms                             

输出结果字段说明:

ns:包含数据库命名空间,后者结合了数据库名称和集合。

db:包含数据库的名称。名为 . 的数据库针对全局锁定,而非特定数据库。

total:mongod花费的时间工作在这个命名空间提供总额。

read:提供了大量的时间,这mongod花费在执行读操作,在此命名空间。

write:提供这个命名空间进行写操作,这mongod花了大量的时间。

十二、复制集管理

创建集群

>cfg={"_id":"名字","members":[{"_id":0,"host":"127.0.0.1:27017"},{"_id":1,"host":"127.0.0.1:27018"},{"_id":2,"host":"127.0.0.1:27019"}]}

初始化集群

>rs.initiate(cfg)

1.修改oplog的大小:100MB
copygroup:PRIMARY> use local  #进入local数据库
copygroup:PRIMARY> db.oplog.rs.stats()
copygroup:PRIMARY>  db.runCommand({"convertToCapped":"oplog.rs","size":102400000})
2.部署复制集群以密钥认证,其他登录需要密码认证
[root@localhost ~] mongo --port 27018   #登录集群master节点
copygroup:PRIMARY>use admin
copygroup:PRIMARY> db.createUser({"user":"root","pwd":"123456","roles":["root"]})

Successfully added user: { "user" : "root", "roles" : [ "root" ] }
[root@localhost ~]  cat << END >> /usr/local/mongodb/conf/mongodb1.conf 
> clusterAuthMode=keyFile
> keyFile=/usr/local/mongodb/conf/crushlinuxkey
> END
[root@localhost ~] cat << END >> /usr/local/mongodb/conf/mongodb2.conf 
> clusterAuthMode=keyFile
> keyFile=/usr/local/mongodb/conf/crushlinuxkey
> END
[root@localhost ~] cat << END >> /usr/local/mongodb/conf/mongodb3.conf 
> clusterAuthMode=keyFile
> keyFile=/usr/local/mongodb/conf/crushlinuxkey
> END
[root@localhost ~] cat << END >> /usr/local/mongodb/conf/mongodb4.conf 
> clusterAuthMode=keyFile
> keyFile=/usr/local/mongodb/conf/crushlinuxkey
> END

[root@localhost ~] echo "123456 key" > /usr/local/mongodb/conf/copygroupkey
[root@localhost ~] chmod 600 /usr/local/mongodb/conf/copygroupkey
[root@localhost ~] etc/init.d/mongodb mongodb1 restart
-bash: etc/init.d/mongodb: 没有那个文件或目录
[root@localhost ~] /etc/init.d/mongodb mongodb1 restart
killing process with pid: 24374
about to fork child process, waiting until server is ready for connections.
forked process: 24955
ERROR: child process failed, exited with error number 1
To see additional information in this output, start without the "--fork" option.
[root@localhost ~] /etc/init.d/mongodb mongodb1 restart
[root@localhost ~] /etc/init.d/mongodb mongodb2 restart
[root@localhost ~] /etc/init.d/mongodb mongodb3 restart
[root@localhost ~] /etc/init.d/mongodb mongodb4 restart
[root@localhost ~] mongo --port 27018
copygroup:PRIMARY> rs.status()
"operationTime" : Timestamp(1578411059, 1),
	"ok" : 0,  #无法查看

copygroup:PRIMARY> use admin
switched to db admin
copygroup:PRIMARY> db.auth("root","123456")  #验证后
1
copygroup:PRIMARY> rs.status()
{
	"set" : "copygroup",  #可以查看
	"date" : ISODate("2020-01-07T15:31:45.135Z"),
	"myState" : 1,
	"term" : NumberLong(4),
	"syncingTo" : "",

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还能再学点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值