• MongoDB 简介和安装


    一、MongoDB 相关概念

    1.1 业务应用场景

    1.1.1 三高需求

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

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

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

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

    1.1.2 常见的使用 MongoDB 的场景

            1)社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。

            2)游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。

            3)物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。

            4)物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。        

            5)视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。

            在上述的这些应用场景中,数据操作方面的共同特点是:数据量大、写入操作频繁(读写都很频繁)、价值较低的数据,对事务性要求不高。对于这样的数据,我们更适合使用 MongoDB 来实现数据的存储。

    1.1.3 什么时候选择 MongoDB

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

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

    1.2 MongoDB 简介

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

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

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

    1.3 体系结构

            Mysql MongDB 对比,如下:

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

    1.4 数据类型

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

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

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

            Bson 中,除了基本的 JSON 类型:string,integer,boolean,double,null,array 和 object,MongoDB 还使用了特殊的数据类型。这些类型包括 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中没有这个类型。

            提示:shell 默认使用 64 位浮点型数值,例如:{“x”:3.14} {“x”:3}

            对于整型值,可以使用 NumberInt4 字节符号整数)或 NumberLong8 字节符号整数),例如:{“x”:NumberInt(“3”)} {“x”:NumberLong(“3”)} 

    1.5 MongoDB 特点

    a、高性能

            MongoDB 提供高性能的数据持久性。特别是对嵌入式数据模型的支持减少了数据库系统上的 I/O 活动。索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求、TTL 索引解决历史数据自动过期的需求、地理位置索引可用于构建各种 O2O 应用)。Gridfs 解决文件存储的需求。

    b、高可用性

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

    c、高扩展性

            MongoDB 提供了水平可扩展性作为其核心功能的一部分。分片将数据分布在一组集群的机器上(海量数据存储,服务能力水平扩展)。

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

    d、丰富的查询支持

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

    二、单机部署

    2.1 Windows 系统安装启动

            第一步,下载安装包,MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从 MongoDB 官网下载安装,选择版本如下,其中 zip 包为免安装版本。

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

            y 为奇数时表示当前版本为开发版,如:1.5.24.1.13

            y 为偶数时表示当前版本为稳定版,如:1.6.34.0.10

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

            第二步,解压安装启动,将压缩包解压到一个目录中。在解压目录中,手动创建两个文件夹data/db 用于存放数据文件,如下:

            解压完成后,就可以启动 MongoDB 服务了,有两种启动方式,第一种是命令行参数启动,打开 cmd 的命令行窗口,切换到 MongoDB bin 目录下,执行下面的命令:

    mongod --dbpath=..\data\db

            我们在启动信息中可以看到,MongoDB 的默认端口是 27017,如果我们想改变默认的启动端口,可以通过 --port 来指定端口。

            第二种是配置文件方式启动服务,在解压目录中新建 config 文件夹,该文件夹中新建配置文件 mongod.conf ,内容如下,需要注意的是,里面的标签是 yaml 形式的,注意空格的个数。

    1. storage:
    2. #The directory where the mongod instance stores its data.Default Value is "\data\db" on Windows.
    3. dbPath: F:\mongodb-win32-x86_64-2008plus-ssl-4.0.28\data\db

            启动方式为:切换到 bin 目录下,然后执行下面的命令:

    1. mongod -f ..\config\mongod.conf
    2. mongod --config ..\config\mongod.conf

    2.2 连接服务端

            我们上一小节安装了 MongoDB 的服务端,接下来我们使用自带的工具来连接下服务端,打开 cmd 窗口,切换到 bin 目录下,记得服务端的 cmd 窗口不能关,执行下面的命令:

    1. mongo
    2. mongo --host=127.0.0.1 --port=27017

            出现下面这些内容就表示安装成功了。

            可以先输入一些简单的命令来看下

    2.3 安装 Compass 图形化界面客户端

            在 MongoDB 官网下载 MongoDB Compass,则按照步骤安装,如果是下载加压缩版,直接解压,执行里面的 MongoDBCompassCommunity.exe 文件即可。在打开的界面中,输入主机地址、端口等相关信息,点击连接:

    2.4 Linux 系统安装和启动

            第一步,你可以从 MongoDB 官网下载,如下

            第二步,下载完成后上传到 linux 服务器的 /usr/local 路径下,然后执行以下的步骤:

    1. # 解压文件
    2. [root@node1 local]# tar -xvf mongodb-linux-x86_64-rhel70-4.0.28.tgz
    3. # 文件重命名
    4. [root@node1 local]# mv mongodb-linux-x86_64-rhel70-4.0.28 mongodb
    5. # 新建目录用于数据存储
    6. [root@node1 local]# mkdir -p mongodb/single/data/db
    7. # 新建目录用于日志存储
    8. [root@node1 local]# mkdir -p mongodb/single/log
    9. # 新建并修改配置文件
    10. [root@node1 local]# vi mongodb/single/mongod.conf

            配置文件的内容如下:

    1. systemLog:
    2. # MongoDB 发送所有日志输出的目标指定为文件
    3. # The path of the log file to which mongod or mongos should send all diagnostic logging
    4. information
    5. destination: file
    6. # mongod 或 mongos 应向其发送所有诊断日志记录信息的日志文件的路径
    7. path: "/usr/local/mongodb/single/log/mongod.log"
    8. # 当 mongos 或 mongod 实例重新启动时,mongos 或 mongo d会将新条目附加到现有日志文件的末尾。
    9. logAppend: true
    10. storage:
    11. # mongod 实例存储其数据的目录。storage.dbPath 设置仅适用于 mongod。
    12. # The directory where the mongod instance stores its data.Default Value is "/data/db".
    13. dbPath: "/usr/local/mongodb/single/data/db"
    14. journal:
    15. #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
    16. enabled: true
    17. processManagement:
    18. # 启用在后台运行 mongos 或 mongod 进程的守护进程模式。
    19. fork: true
    20. net:
    21. # 服务实例绑定的IP,默认是 localhost
    22. bindIp: localhost,192.168.229.154
    23. # bindIp
    24. # 绑定的端口,默认是 27017
    25. port: 27017

            第三步,启动服务,并查看是否启动成功。

    1. # 启动服务
    2. [root@node1 local]# /usr/local/mongodb/bin/mongod -f mongodb/single/mongod.conf
    3. about to fork child process, waiting until server is ready for connections.
    4. forked process: 9788
    5. child process started successfully, parent exiting
    6. # 通过进程来查看服务是否启动了
    7. [root@node1 local]# ps -ef | grep mongod
    8. root 9788 1 3 23:38 ? 00:00:00 /usr/local/mongodb/bin/mongod -f mongodb/single/mongod.conf
    9. root 9985 4542 0 23:38 pts/1 00:00:00 grep --color=auto mongod

            第四步,开放远程连接,需要关闭防火墙,命令如下

    1. # 查看防火墙状态
    2. systemctl status firewalld
    3. # 临时关闭防火墙
    4. systemctl stop firewalld
    5. # 开机禁止启动防火墙
    6. systemctl disable firewalld

            关闭防火墙之后,使用 Compass 工具连接我们刚才启动的 MongoDB 服务,如下图

  • 相关阅读:
    win10关闭讲述人、粘滞键功能的快捷键启动
    第十三届蓝桥杯JavaB组国赛E题——迷宫 (AC)
    关于印发《深圳市福田区支持战略性新兴产业和未来产业集群发展若干措施》的通知
    替换或重写Tomcat内置的404页面
    【机器学习】Tensorflow.js:我在浏览器中使用机器学习实现了图像分类
    Playbook条件语句
    AtCoder Beginner Contest 275(C,E 补)
    STM32 HAL库串口使用printf
    【面试题】JS第七种数据类型Symbol详解
    Springboot websocket前端无法访问到,Websocket因AOP代理 前端无法请求到
  • 原文地址:https://blog.csdn.net/xhf852963/article/details/133742476