MongoDB高手课学习笔记(一,再入门)

目录

  • 前言
    • what
    • why
    • MongnDB有啥难点
  • MongoDB入门
    • 认识MongoDB
    • MongoDB特色及优势
    • 下载及安装MongoDB,使用mongorestore导入数据
    • MongoDB基本操作
    • Python:Hello World程序开发
    • 聚合查询及实验
      • 基础概念
      • 使用场景
      • 聚合实验
    • MongoDB复制集机制及原理
    • 搭建MongoDB复制集
    • MongoDB常用的工具/软件

前言

what

这是极客时间-MongoDB高手课的学习笔记.
按照数据库排名网站db-engines.com的统计,最近几年MongoDB一直保持在前四五名,前面几位是年龄30多岁的关系型数据库(Oracle,Mysql,SQLServer,PostgreSQL).

why

作为一个新时代的成熟数据库产品,MongoDB最大的优势是开发效率的显著提升和卓越的横向扩展能力.
MongoDB使用了类似对象模型的JSON数据结构,从而大幅度的简化了数据库模式设计/ORM层编码的工作.
如果你是开发者,MongoDB可以让你花更少的时间在数据库上,专注于业务变成
如果你是DBA,它可以帮你解决高可用,高性能以及横向扩展的痛点
如果你是架构师或者产品经理,MongDB是一个非常灵活的数据库,可以快速响应业务的需求变化.

MongnDB有啥难点

MongoDB是五大数据库中唯一的非关系型数据库,即NoSQL,这就意味着,一般技术人员所熟知的数据库知识,可能在开始使用MongoDB的时候,不一定会有很大帮助;
相反,如果你不摒弃那些传统的关系型数据库理念,大概率上你会用一种错误的方式去设计和使用它.最终无法达到最想要的效果.
具体来说,有这几个难点:

  • MongoDB是基于JSON数据模型,鼓励使用文档嵌套方式来减少多表关联的设计,从而达到易用 高性能的目的.但是这种反范式的文档模型设计,目前并没有完整的理论支持,导致即使想系统的学习,也没有太好的资料参考
  • MongoDB依赖于JSON和JavaScript语法,对不熟悉的同学来说需要学习成本
  • MongoDB通过分片来进行横向扩展,分片的设计和调优相对比较复杂.

MongoDB入门

认识MongoDB

MongoDB高手课学习笔记(一,再入门)_第1张图片
MongoDB高手课学习笔记(一,再入门)_第2张图片

MongoDB高手课学习笔记(一,再入门)_第3张图片

MongoDB特色及优势

MongoDB高手课学习笔记(一,再入门)_第4张图片
MongoDB高手课学习笔记(一,再入门)_第5张图片

MongoDB高手课学习笔记(一,再入门)_第6张图片
MongoDB高手课学习笔记(一,再入门)_第7张图片
MongoDB高手课学习笔记(一,再入门)_第8张图片
MongoDB高手课学习笔记(一,再入门)_第9张图片
节点建议是3个以上,奇数,投票机制
默认Driver连接主节点(Primary)
滚动服务就是不下线升级,无缝升级

MongoDB高手课学习笔记(一,再入门)_第10张图片
MongoDB高手课学习笔记(一,再入门)_第11张图片

下载及安装MongoDB,使用mongorestore导入数据

https://www.runoob.com/mongodb/mongodb-tutorial.html
图形化管理工具使用compass

导入测试数据:
从github/gitee上 下载dump.tar.gz文件
● tar -xvf dump.tar.gz
● mongorestore -h localhost:27017 (恢复数据文件,默认从当前目录找dump文件夹)
mongorestore 这个命令,在新版本的mongodb server中已经没有了,而是专门抽出来了一个mongodb-database-tools,需要从官网单独下载安装.

MongoDB基本操作

MongoDB高手课学习笔记(一,再入门)_第12张图片

MongoDB高手课学习笔记(一,再入门)_第13张图片

MongoDB高手课学习笔记(一,再入门)_第14张图片

MongoDB高手课学习笔记(一,再入门)_第15张图片
MongoDB高手课学习笔记(一,再入门)_第16张图片
根据子文档的字段查询,使用{“from.country” : “China”} 这种方式
在这里插入图片描述
MongoDB高手课学习笔记(一,再入门)_第17张图片
MongoDB高手课学习笔记(一,再入门)_第18张图片
MongoDB高手课学习笔记(一,再入门)_第19张图片

MongoDB高手课学习笔记(一,再入门)_第20张图片
MongoDB高手课学习笔记(一,再入门)_第21张图片

MongoDB高手课学习笔记(一,再入门)_第22张图片
MongoDB高手课学习笔记(一,再入门)_第23张图片

Python:Hello World程序开发

MongoDB高手课学习笔记(一,再入门)_第24张图片
MongoDB高手课学习笔记(一,再入门)_第25张图片
MongoDB高手课学习笔记(一,再入门)_第26张图片

聚合查询及实验

基础概念

MongoDB高手课学习笔记(一,再入门)_第27张图片
MongoDB高手课学习笔记(一,再入门)_第28张图片
MongoDB高手课学习笔记(一,再入门)_第29张图片
MongoDB高手课学习笔记(一,再入门)_第30张图片

MongoDB高手课学习笔记(一,再入门)_第31张图片

使用场景

MongoDB高手课学习笔记(一,再入门)_第32张图片
MongoDB高手课学习笔记(一,再入门)_第33张图片
MongoDB高手课学习笔记(一,再入门)_第34张图片
MongoDB高手课学习笔记(一,再入门)_第35张图片
MongoDB高手课学习笔记(一,再入门)_第36张图片
MongoDB高手课学习笔记(一,再入门)_第37张图片

聚合实验

基于之前已经导入的mock订单数据

聚合查询所有记录,所以聚合字段(_id)为空

db.orders.aggregate([
	{$group:
		{
			_id:null,
			total:{$sum: "$total"}
		}
	}
])

MongoDB高手课学习笔记(一,再入门)_第38张图片
通过compass更方便的看出每个stage的中间结果,直观:
MongoDB高手课学习笔记(一,再入门)_第39张图片

MongoDB复制集机制及原理

MongoDB高手课学习笔记(一,再入门)_第40张图片
MongoDB高手课学习笔记(一,再入门)_第41张图片
MongoDB高手课学习笔记(一,再入门)_第42张图片
MongoDB高手课学习笔记(一,再入门)_第43张图片
MongoDB高手课学习笔记(一,再入门)_第44张图片
MongoDB高手课学习笔记(一,再入门)_第45张图片
MongoDB高手课学习笔记(一,再入门)_第46张图片
MongoDB高手课学习笔记(一,再入门)_第47张图片

搭建MongoDB复制集

之前我们已经安装单机版的了,所以直接多几个配置文件,启动实例就好

  1. 创建三个文件夹: mkdir -p /data/mongotest/replica/db{1,2,3}
  2. 准备配置文件,因为在一台机器部署,所以需要配置不同的端口,数据目录,日志文件路径:
    拿其中一个举例:
# /data/db1/mongod.conf
systemLog:
  destination: file
  path: /data/mongotest/replica/db1/mongod.log # log path
  logAppend: true
storage:
  dbPath: /data/mongotest/replica/db1 # data directory
net:
  bindIp: 0.0.0.0
  port: 28017 # port
replication:
  replSetName: rs0
processManagement:
  fork: true
  1. 启动:
    mongod -f db1/mongod.conf
    mongod -f db2/mongod.conf
    mongod -f db3/mongod.conf
  2. 配置复制集
    刚才启动了三个mongodb实例,但是他们仨是互相独立的,现在通过配置把他们联系起来
    动态配置,需要配置主机名.可以通过hostname -f验证一下有没有配置成功主机名
    # 首先连接primary节点,mongo localhost:28017
    > rs.initiate()  # 输入命令,初始化
    {
    	"info2" : "no configuration specified. Using a default configuration for the set",
    	"me" : "instance-3myjwcaa:28017",
    	"ok" : 1,
    	"$clusterTime" : {
    		"clusterTime" : Timestamp(1600658268, 1),
    		"signature" : {
    			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
    			"keyId" : NumberLong(0)
    		}
    	},
    	"operationTime" : Timestamp(1600658268, 1)
    }
    rs0:SECONDARY>   # 这里按回车进入PRIMARY
    rs0:PRIMARY> 
    rs0:PRIMARY> rs.status() # 查看rs复制集的状态,这里面也可以看到hostname
    rs0:PRIMARY> rs.add("instance-name:28018") # 添加一个实例道复制集
    rs0:PRIMARY> rs.add("instance-name:28019") # 再添加一个实例道复制集
    {
    	"ok" : 1,
    	"$clusterTime" : {
    		"clusterTime" : Timestamp(1600658593, 1),
    		"signature" : {
    			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
    			"keyId" : NumberLong(0)
    		}
    	},
    	"operationTime" : Timestamp(1600658593, 1)
    }
    # 这时候再通过rs.status()查看的话,members有三个了,一个primary,两个secondary
    # 但是还要进入secondary的节点,配置可读,mongo localhost:28018
    rs.slaveOk()
    
  3. 验证
    在primary节点插入数据,在secondary节点就可以看到了

MongoDB常用的工具/软件

MongoDB高手课学习笔记(一,再入门)_第48张图片

Atlas国内不太行
MongoDB高手课学习笔记(一,再入门)_第49张图片
MongoDB高手课学习笔记(一,再入门)_第50张图片
MongoDB高手课学习笔记(一,再入门)_第51张图片
MongoDB高手课学习笔记(一,再入门)_第52张图片

你可能感兴趣的:(mongodb,数据库,mongodb)