MongoDB笔记01-概念与安装

文章目录


前言

MongoDB 是一个开源的 NoSQL 数据库,它以其灵活性、高性能和可扩展性著称。MongoDB 的文档模型使得它非常适合存储复杂的数据结构,并且易于进行扩展。它非常适合处理大量非结构化或半结构化数据,并且能够支持高并发的读写操作。

MongoDB 将数据记录存储为 BSON 文档。BSON 是 JSON 文档的二进制表示形式,但它包含的数据类型比 JSON 多。

一、MongoDB相关概念

官网:https://www.mongodb.com/zh-cn

1.1 业务应用场景

传统的关系型数据库(如MySQL),在数据操作的"三高"需求以及应对Web2.0的网站需求面前,显得力不从心。

解释:"三高"需求:

• High performance - 对数据库高并发读写的需求。

• Huge Storage - 对海量数据的高效率存储和访问的需求。

• High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。

而MongoDB可应对"三高"需求。

具体的应用场景

  1. 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
  2. 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
  3. 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将 订单所有的变更读取出来。
  4. 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
  5. 视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。

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

  • 数据量大
  • 写入操作频繁(读写都很频繁)
  • 价值较低的数据,对事务性要求不高 对于这样的数据,我们更适合使用MongoDB来实现数据的存储。

什么时候选择MongoDB

在架构选型上,除了上述的三个特点外,如果你还犹豫是否要选择它?可以考虑以下的一些问题:

  • 应用不需要事务及复杂 join 支持
  • 新应用,需求会变,数据模型无法确定,想快速迭代开发
  • 应用需要2000-3000以上的读写QPS(更高也可以)
  • 应用需要TB甚至 PB 级别数据存储
  • 应用发展迅速,需要能快速水平扩展
  • 应用要求存储的数据不丢失 应用需要99.999%高可用
  • 应用需要大量的地理位置查询、文本查询

如果上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MongoDB 绝不会后悔。

相对于MySQL,MongoDB可以以更低的成本解决问题(包括学习、开发、运维等成本)

1.2 MongoDB简介

MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最像关系型数据库(MySQL)的非关系型数据库。

它支持的数据结构非常松散,是一种类似于 JSON 的 格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。

MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。

1.3 体系结构

MySQL和MongoDB对比

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins collection 表连接,MongoDB不支持
嵌入文档 MongoDB通过嵌入式文档来替代多表连接
primary key primary key 主键,MongoDB自动将_id字段设置为主键

1.4 数据模型

MongoDB的最小存储单位就是文档(document)对象。文档(document)对象对应于关系型数据库的行。数据在MongoDB中以BSON(Binary-JSON)文档的格式存储在磁盘上。

BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON。BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

BSON采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。

Bson中,除了基本的JSON类型:string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括date,object id,binary data,regular expression 和code。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详细信息。

BSON数据类型参考列表:

数据类型 描述 举例
字符串 UTF-8字符串都可表示为字符串类型的数据 {"x" : "foobar"}
对象id 对象id是文档的12字节的唯一ID {"X" :ObjectId() }
布尔值 真或者假:true或者false {"x":true}
数组 值的集合或者列表可以表示成数组 {"x" : ["a", "b", "c"]}
32位整数 类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。 shell是不支持该类型的,shell中默认会转换成64位浮点数
64位整数 不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数 shell是不支持该类型的,shell中默认会转换成64位浮点数
64位浮点数 shell中的数字就是这一种类型 {"x":3.14159,"y":3}
null 表示空值或者未定义的对象 {"x":null}
undefined 文档中也可以使用未定义类型 {"x":undefined}
符号 shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串
正则表达式 文档中可以包含正则表达式,采用JavaScript的正则表达式语法 {"x" : /foobar/i}
代码 文档中还可以包含JavaScript代码 {"x" : function() { /* ...... */ }}
二进制数据 二进制数据可以由任意字节的串组成,不过shell中无法使用
最大值/最小值 BSON包括一个特殊类型,表示可能的最大值。shell中没有这个类型。 {"x":null}

提示:

shell默认使用64位浮点型数值。{"x":3.14}或{"x":3}。对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符号整数),{"x":NumberInt("3")}{"x":NumberLong("3")}

1.5 MongoDB的特点

MongoDB主要有如下特点:

  1. 高性能 : MongoDB提供高性能的数据持久性。特别是, 对嵌入式数据模型的支持减少了数据库系统上的I/O活动。

    索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求、地理位置索引可用于构建各种 O2O 应用)

    mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求。 Gridfs解决文件存储的需求。

  2. 高可用性: MongoDB的复制工具称为副本集(replica set),它可提供自动故障转移和数据冗余。

  3. 高扩展性: MongoDB提供了水平可扩展性作为其核心功能的一部分。 分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展) 从3.4开始,MongoDB支持基于片键创建数据区域。在一个平衡的集群中,MongoDB将一个区域所覆盖的读写只定向到该区域内的那些 片。

  4. 丰富的查询支持: MongoDB支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。

  5. 其他特点:如无模式(动态模式)、灵活的文档模型、

二、本地单机部署

2.1 Windows系统中的安装启动

第一步:下载安装包

MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:

https://www.mongodb.com/download-center#community

注意:本文的安装的是压缩版,不是安装版(有安装步骤的方式)。

根据上图所示下载 zip 包。

提示:版本的选择:

MongoDB的版本命名规范如:x.y.z;

y为奇数时表示当前版本为开发版,如:1.5.2、4.1.13;

y为偶数时表示当前版本为稳定版,如:1.6.3、4.0.10;

z是修正版本号,数字越大越好。

详情:http://docs.mongodb.org/manual/release-notes/#release-version-numbers

第二步:解压安装启动

将压缩包解压到一个目录中。

在解压目录中,手动建立一个目录用于存放数据文件

1.命令行参数方式启动服务(推荐)

在mongodb中新建文件夹data/db和data/log/mongo.log)

进入bin文件夹中cmd运行

js 复制代码
mongod --dbpath "..\data\db" --logpath "..\data\log\mongo.log"
2.配置文件方式启动服务

在解压目录中新建 config 文件夹,该文件夹中新建配置文件 mongod.conf ,内如参考如下:

yml 复制代码
storage:
	 #The directory where the mongod instance stores its data.Default Value is "\data\db" on Windows.
	 dbPath: E:\tool\mongodb-win32-x86_64-2008plus-ssl-4.0.12\data\db

详细配置项内容可以参考官方文档:https://docs.mongodb.com/manual/reference/configuration-options/

【注意】

  1. 配置文件中如果使用双引号,比如路径地址,自动会将双引号的内容转义。如果不转义,则会报错:
txt 复制代码
error-parsing-yaml-config-file-yaml-cpp-error-at-line-3-column-15-unknown-escape-character-d

解决方法:

a. 对 \ 换成 / 或 \

b. 如果路径中没有空格,则无需加引号。

  1. 配置文件中不能以Tab分割字段
    解决:
    将其转换成空格。
    启动方式:
txt 复制代码
mongod -f ../config/mongod.conf
或
mongod --config ../config/mongod.conf

更多参数配置:

yml 复制代码
systemLog:
    destination: file
    #The path of the log file to which mongod or mongos should send all diagnostic logging information
    path: "D:\tools\mongodb-win32-x86_64-2008plus-ssl-4.0.12/log/mongod.log"
    logAppend: true
storage:
    journal:
    	enabled: true
    #The directory where the mongod instance stores its data.Default Value is "/data/db".
    dbPath: "D:\tools\mongodb-win32-x86_64-2008plus-ssl-4.0.12/data"
net:
    #bindIp: 127.0.0.1
    port: 27017
setParameter:
    enableLocalhostAuthBypass: false
验证服务是否启动成功

启动成功后,在浏览器中输入http://127.0.0.1:27017,出现以下情况表示启动成功。

接下来的配置不是必须的,可以跳过。

配置环境变量

右键此电脑,选择属性

选择高级系统设置

选择环境变量

找到Path,点击编辑

点击新建,将mongodb的bin文件夹的绝对路径复制到这里,然后一直点确定,直到控制面板。

win+R然后输入cmd打开黑窗口,输入mongod --version出现版本号即为配置成功。

mongdb开机自动启动

如果每次都要通过cmd的方式启动服务也太麻烦了,这里可以选择设置成开机自启动。

还是打开cmd窗口,不过这次是以管理员身份运行,然后输入如下命令:

js 复制代码
mongod --dbpath "D:\tools\mongodb-win32-x86_64-2008plus-ssl-4.0.12\data\db" --logpath "D:\tools\mongodb-win32-x86_64-2008plus-ssl-4.0.12\data\log\mongo.log" -install -serviceName "MongoDB"

注意:路径换成安装时的绝对路径

然后使用win+R然后输入services.msc命令打开服务进行查看:

2.2 Shell连接mongodb(mongo命令)

cmd新开一个命令提示符,输入以下shell命令即可完成登陆

shell 复制代码
在命令提示符输入以下shell命令即可完成登陆
mongo
或
mongo --host=127.0.0.1 --port=27017

查看已经有的数据库

shell 复制代码
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> show databases
admin   0.000GB
config  0.000GB
local   0.000GB

退出mongodb

shell 复制代码
> exit

2.3 Compass-图形化界面客户端

到MongoDB官网下载MongoDB Compass,

地址:https://www.mongodb.com/download-center/v2/compass?initial=true
如果是下载安装版,则按照步骤安装;如果是下载加压缩版,直接解压,执行里面的 MongoDBCompassCommunity.exe 文件即可。
在打开的界面中,输入主机地址、端口等相关信息,点击连接:
解压后点击exe文件

打开后直接点击连接即可(默认设置)

后续文章:
MongoDB笔记02-MongoDB基本常用命令
MongoDB笔记03-MongoDB索引
MongoDB笔记04-SpringBoot整合MongoDB

相关推荐
欧先生^_^6 分钟前
Jinja 的详细介绍和学习方法
数据库·sqlite
husterlichf7 分钟前
MYSQL 常用字符串函数 和 时间函数详解
数据库·sql·mysql
丰锋ff16 分钟前
考研英一学习笔记
笔记·学习·考研
小墨宝17 分钟前
js 生成pdf 并上传文件
前端·javascript·pdf
hnlucky32 分钟前
redis 数据类型新手练习系列——Hash类型
数据库·redis·学习·哈希算法
HED32 分钟前
用扣子快速手撸人生中第一个AI智能应用!
前端·人工智能
DN金猿36 分钟前
使用npm install或cnpm install报错解决
前端·npm·node.js
丘山子37 分钟前
一些鲜为人知的 IP 地址怪异写法
前端·后端·tcp/ip
Invinciblenuonuo40 分钟前
FreeRTOS学习笔记【10】-----任务上下文切换
笔记·学习
志存高远661 小时前
Kotlin 的 suspend 关键字
前端