MongoDB笔记记录(雷哥课堂)--mongodb介绍

1 MongoDB介绍

1.1 应用场景

传统的关系型数据库(如MySQL),在应对当下互联网产品的某些需求面前,显得力不从心

  • 数据库高写入负载需求
  • 对海量数据的高效率存储和读取
  • 对数据库的高扩展性的需求

这些场景中,MySQL处理起来显得很麻烦,而MongoDB应对起来则很灵活。


具体的应用场景:

视频直播:使用MongoDB存储点赞、评论、弹幕信息。

游戏场景:使用MongoDB存储用户积分、打怪记录、NPC对话记录。

社交场景:使用MongoDB存储朋友圈信息、浏览记录、评论、转发、收藏、附近的人、聊天记录。

电商场景:使用MongoDB存储收藏、购物车、浏览历史。

数据不太重要


这些场景中,数据操作方面的共同特点是:

1. 数据量大
2. 写入操作频繁
3. 数据价值较低,能接受少量的数据丢失和不同步
4. 查询频率可能很频繁或者频率很低。

1.2 什么时候选择MongoDB

在架构选型上,除了上面4个特点外,还有什么场景可以使用到MongoDB?

  • 业务不需要事务或者不需要复杂的连表查询
  • 快速迭代开发,需求变更较快,表结构常常会因此修改
  • 系统需要应对高达3000QPS(或者更高)的读写
  • 业务数据需要GB、TB甚至PB级别的存储
  • 系统接受数据在允许的范围内丢失
  • 系统需要大量数据的查询,如地理位置。

如果遇到了以上的场景,就可以考虑MongoDB。当然你可以继续使用MySQL,这样可以降低引入一门新技术带来的维护、学习成本,但是以上场景使用MySQL往往会使系统存在瓶颈。

1.3 MongoDB简介


MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和**非关系数据库**之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。


MongoDB特点

MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库 单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。具体特点总结如下:

(1)面向集合存储,易于存储对象类型的数据

(2)模式自由

(3)支持动态查询

(4)支持完全索引,包含内部对象

(5)支持复制和故障恢复

(6)使用高效的二进制数据存储,包括大型对象(如视频等)

(7)自动处理碎片,以支持云计算层次的扩展性

(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序,社区中也提供了对Erlang 及.NET 等平台的驱动程序

(9) 文件存储格式为 BSON(一种 JSON 的扩展)

1.4 MongoDB体系结构

MongoDB 的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用 MongoDB 开发应用程序使用的就是逻辑结构。

(1)MongoDB 的文档(document),相当于关系数据库中的一行记录。

(2)多个文档组成一个集合(collection),相当于关系数据库的表。

(3)多个集合(collection),逻辑上组织在一起,就是数据库(database)。

(4)一个 MongoDB 实例支持多个数据库(database)

1.5 数据类型

数据类型简介举例
字符串 字符串类型的数据   {"name": "张三"}  
对象id      对象id是文档的12字节的唯一ID,一般key是固定的_id {"_id": ObjectId()}  
布尔值 true/false   {"state": true}     
数组值的集合,类似于json中的数组   {"hobby": ["唱", "跳", "rap", "篮球"]}  
64位浮点数BSON中数字只支持这种类型,没有整数类型。但是可以使用NumberInt(4字节整数)或者NumberLong(8字节符号整数)来表示整数{"score": 150},<br />{"age": NumberInt(18)}
null 表示空值或者未定义的对象 {"sex": null} 
undefined 表示未定义的对象 {"sex": undefined}       
正则表达式BSON的正则采用JavaScript的正则表达式语法{"pattern": /\d/} 
代码BSON可以包含JavaScript代码{"code": function() {xxx}}    

1.6 MongoDB的特点

1. 高性能

   MongoDB提供高性能的数据持久性,对嵌入式数据模型的支持减少了数据库系统上的IO活动。

   支持索引查询,使查询的速度更加提高

   支持如mmapv1、wiredtiger等多种存储引擎

2. 高可用

   MongoDB的复制工具称为副本集,它可以提供自动故障转移和数据冗余

3. 高扩展

   MongoDB提供了水平可扩展性作为核心功能的一部分。

   分片将数据分布在一组集群的机器上。

   从3.4版本开始,MongoDB支持基于分片键创建数据区域,在一个平衡的集群中,MongoDB将一个区域所覆盖的读写只定向到该区域内的那些片

4. 丰富的查询支持

   MongoDB支持丰富的查询语言,如数据聚合、文本搜索、地理空间查询等。

2 安装

[下载地址](https://www.mongodb.com/try/download/community)

![image-20200802201100423](https://ydsmarkdown.oss-cn-beijing.aliyuncs.com/md/20200802201100.png)

MongoDB的版本号是x.y.z,其中x是大版本,y为奇数的时候是开发版,y为偶数的时候是稳定版,z是修正版本号,z越大往往意味着bug越少。当前版本是4.4.0,不建议下载该版本,推荐下载4.0.19版本。

如果是Linux则下载Linux版本

2.1 windows系统安装

下载windows版本的zip包,放到一个目录中,解压到当前目录。

在解压目录中,手动创建一个目录存放数据文件,如data/db

命令行启动

在bin目录中按住键盘shift,右击鼠标,选择在此处打开命令窗口(如果打开的是powershell就需要手动进cmd切换到bin目录),然后输入如下命令:

mongod --dbpath=../data/db

mongodb默认的端口是27017,如果想改变默认的端口,可以在启动的时候使用 **--port** 来指定端口。

为了方便启动,可以将bin目录配置到环境变量中,这样就可以在任何地方使用mongodb的命令了。

配置文件方式启动服务

在解压目录中新建config文件夹,在里面新建配置文件 `mongod.conf`,内容如下

storage:
  dbPath: H:\\mongodb\\data

注意:路径中不可以有Tab字符,路径有空格需要加双引号,双引号需要转义,对于\字符也需要换成\\\或者/

接着使用命令启动

mongod -f ../config/mongod.conf
或者
mongod --config ../config/mongod.conf

2.2 Linux系统安装

Linux部署MongoDB操作和Windows差不多

官网下载 https://www.mongodb.com/try/download/community

  • Linux版的tgz包,上传到Linux目录中,解压到当前目录
  • 一般为默认为计算机的下载位置,定位到下载位置
  • 移动解压后的文件夹到指定目录
  •  mongodb的下载名字太长了,改为mongodb4
  • 配置环境变量,方便后续的命令行操作
  • 新建配置文件,并修改内容
  • 配置文件内容(填写文件的路径)

 完整操作

[root@bogon 下载]# cd /usr #定位到usr文夹
[root@bogon usr]# mkdir -m 777 mongodb #创建mongoddb文件夹
[root@bogon usr]# cd /home/wsq/下载 #定位到下载位置
[root@bogon 下载]# tar zxvf mongodb-linux-x86_64-rhel70-4.0.23.tgz #解压文件
mongodb-linux-x86_64-rhel70-4.0.23/THIRD-PARTY-NOTICES.gotools
mongodb-linux-x86_64-rhel70-4.0.23/README
mongodb-linux-x86_64-rhel70-4.0.23/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-rhel70-4.0.23/MPL-2
mongodb-linux-x86_64-rhel70-4.0.23/LICENSE-Community.txt
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongodump
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongorestore
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongoexport
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongoimport
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongostat
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongotop
mongodb-linux-x86_64-rhel70-4.0.23/bin/bsondump
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongofiles
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongoreplay
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongod
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongos
mongodb-linux-x86_64-rhel70-4.0.23/bin/mongo
mongodb-linux-x86_64-rhel70-4.0.23/bin/install_compass
[root@bogon 下载]# ls #查看该目录下文件,之后要对其中文件进行移动
apache-tomcat-8.5.40.tar.gz  mongodb-linux-x86_64-rhel70-4.0.23      QQ
baidunetdisk                 mongodb-linux-x86_64-rhel70-4.0.23.tgz  sougou
jdk-8u281-linux-x64.tar.gz   【MongoDB】从入门到精通
[root@bogon 下载]# mv mongodb-linux-x86_64-rhel70-4.0.23 /usr/mongodb/mongodb4 #移动到指定位置并且改名为mongodb4
[root@bogon 下载]# cd /usr/mongodb 
[root@bogon mongodb]# vi /etc/profile #配置环境变量
找到export PATH USER LOGNAME MATL HOSTNAME HISTSIZE HISTCONTROL
按i键插入 export PATH=/usr/mongodb/mongodb4/bin:$PATH
按ESC退出,输入:wq(注意冒号不要少)
[root@bogon mongodb]# source /etc/profile #使得环境变量生效
[root@bogon mongodb]# cd /usr/mongodb/mongodb4
[root@bogon mongodb4]# touch mongodb.conf #创建配置文件
[root@bogon mongodb4]# mkdir db #创建数据库目录
[root@bogon mongodb4]# mkdir log #创建日志目录
[root@bogon mongodb4]# chmod 777 db
[root@bogon mongodb4]# chmod 777 log
[root@bogon mongodb4]# cd log #创建日志目录
[root@bogon log]# touch mongodb.log
[root@bogon log]# cd /usr/mongodb/mongodb4
[root@bogon mongodb4]# ll
总用量 196
drwxr-xr-x. 2 root root   231 3月  24 14:40 bin
drwxrwxrwx. 2 root root     6 3月  24 14:46 db
-rw-r--r--. 1 root root 30608 2月  18 00:35 LICENSE-Community.txt
drwxrwxrwx. 2 root root    25 3月  24 14:46 log
-rw-r--r--. 1 root root     0 3月  24 14:45 mongodb.conf
-rw-r--r--. 1 root root 16726 2月  18 00:35 MPL-2
-rw-r--r--. 1 root root  2601 2月  18 00:36 README
-rw-r--r--. 1 root root 60005 2月  18 00:36 THIRD-PARTY-NOTICES
-rw-r--r--. 1 root root 81355 2月  18 00:36 THIRD-PARTY-NOTICES.gotools
[root@bogon mongodb4]# vim mongodb.conf
[root@bogon mongodb4]# vi mongodb.conf #修改配置文件内容
将以下内容粘贴复制
port=27017 #端口
dbpath=/usr/mongodb/mongodb4/db #数据库存文件存放目录
logpath=/usr/mongodb/mongodb4/log/mongodb.log #日志文件存放路径
logappend=true #使用追加的方式写日志
fork=true #以守护进程的方式运行,创建服务器进程
maxConns=100 #最大同时连接数
noauth=true #不启用验证
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
             #即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger  #存储引擎,有mmapv1、wiretiger、mongorocks
bind_ip = 0.0.0.0  #设置成全部ip可以访问,这样就可以在windows中去连虚拟机的MongoDB,也可以设置成某个网段或者某个ip


最后按ESC退出,输入:wq(注意冒号不要少)
[root@bogon mongodb4]# cd log
[root@bogon log]# mongod --config /usr/mongodb/mongodb4/mongodb.conf #启动mongodb
about to fork child process, waiting until server is ready for connections.
forked process: 10987
child process started successfully, parent exiting
[root@bogon log]# systemctl stop firewalld.service #关闭防火墙
[root@bogon log]# systemctl disable firewalld.service
[root@bogon log]# cd /usr/mongodb/mongodb4
[root@bogon mongodb4]# cd bin
[root@bogon bin]# mongo
MongoDB shell version v4.0.23
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("598c7e29-080f-4959-bbe7-a1a7d3067bc6") }
MongoDB server version: 4.0.23
Server has startup warnings: 
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] 
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] 
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] 
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2021-03-24T14:53:36.284+0800 I CONTROL  [initandlisten] 
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).

The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.

To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> 

查看服务是否启动成功

ps -aux|grep mongod

Linux下关闭MongoDB步骤(极不建议使用kill强制杀死进程,这样数据会存在损坏)

客户端登录服务

[root@bogon bin]# ./mongo --port 27017
MongoDB shell version v4.0.19
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("04bb3435-500b-460b-b5ae-9f1ef4b99a76") }
MongoDB server version: 4.0.19
> 

 

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> use admin #切换到admin库
switched to db admin
> db.shutdownServer()#关闭服务
2021-03-24T15:31:25.962+0800 I NETWORK  [js] DBClientConnection failed to receive message from 127.0.0.1:27017 - HostUnreachable: Connection closed by peer
server should be down...
2021-03-24T15:31:25.998+0800 I NETWORK  [js] trying reconnect to 127.0.0.1:27017 failed
2021-03-24T15:31:25.998+0800 I NETWORK  [js] reconnect 127.0.0.1:27017 failed failed 
> 


2.3 Compass客户端连接

到官网下载compass [下载地址](https://www.mongodb.com/download-center/v2/compass?initial=true)

直接解压运行,界面上输入连接信息点击连接

![image-20200802214314158](https://ydsmarkdown.oss-cn-beijing.aliyuncs.com/md/20200802214314.png)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小夏天禧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值