MongoDB 数据库简介、安装及使用

  • 一.MongoDB是什么及其特点
    • 1. MongoDB 的优势
    • 2.MongoDB 支持的常见数据类型
    • 3.MongoDB 索引及其作用
    • 4. MongoDB 适应的场景和不适用的场景
    • 5.MongoDB 的复制过程
    • 6.MongoDB 副本集及其特点
  • 二.MongoDB 分片集群
    • 1、MongoDB 分片集群相对副本集的优势
    • 2、MongoDB 分片集群的优势
    • 3、MongoDB 分片集群的架构组件
    • 4、MongoDB 分片集群和副本集群的区别
    • 5、MongoDB 的几种分片策略及其相互之间的差异
    • 6、MongoDB 分片集群采取什么方式确保数据分布的平衡
    • 7、 MongoDB 备份及恢复方式
  • 三.MongoDB部署方案
    • 1、上传压缩包并解压
    • 2、配置环境变量及配置文件
    • 3、启动mongodb
    • 4、创建MongoDB的账号
    • 5.Navicat 工具连接

一.MongoDB是什么及其特点

  • MongoDB 是一个开源的、基于分布式的、面向文档存储的非关系型数据库。是非关系型数据库当中功能最丰富、最像关系数据库的。其主要特点如下:

  • 查询丰富:MongoDB 最大的特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

  • 面向文档:文档就是存储在 MongoDB 中的一条记录,是一个由键值对组成的数据结构。

  • 模式自由:MongoDB 每一个 Document 都包含了元数据信息,每个文档之间不强迫要求使用相同的格式,同时他们也支持各种索引。

  • 高可用性:MongoDB 支持在复制集(Replica Set)通过异步复制达到故障转移,自动恢复,集群中主服务器崩溃停止服务和丢失数据,备份服务器通过选举获得大多数投票成为主节点,以此来实现高可用。

  • 水平拓展:MongoDB 支持分片技术,它能够支持并行处理和水平扩展。

  • 支持丰富:MongoDB 另外还提供了丰富的 BSON 数据类型,还有 MongoDB 的官方不同语言的 driver 支持(C/C++、C#、Java、Node.js、Perl、PHP、Python、Ruby、Scala)。

1. MongoDB 的优势

1、面向文档的存储:以 JSON 格式的文档保存数据。

2、 任何属性都可以建立索引。

3、 复制以及高可扩展性。

4、 自动分片。

5、 丰富的查询功能。

6、 快速的即时更新。

2.MongoDB 支持的常见数据类型

  • String:字符串。存储数据常用的数据类型。

  • Integer:整型数值。用于存储数值。

  • Boolean:布尔值。用于存储布尔值(真/假)。

  • Array:用于将数组或列表或多个值存储为一个键。

  • Date:日期时间。用 UNIX 时间格式来存储当前日期或时间。

  • Binary Data:二进制数据。用于存储二进制数据。

  • Code:代码类型。用于在文档中存储 JavaScript 代码。

  • Regular expression:正则表达式类型。用于存储正则表达式。

3.MongoDB 索引及其作用

  • 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB 在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

  • 这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可能要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

  • 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

常见索引

  • 单字段索引(Single Field Indexes)

  • 符合索引(Compound Indexes)

  • 多键索引(Multikey Indexes)

  • 全文索引(Text Indexes)

  • Hash 索引(Hash Indexes)

  • 通配符索引(Wildcard Indexes)

4. MongoDB 适应的场景和不适用的场景

MongoDB 属于典型的非关系型数据库。

  • 主要适应场景

1、网站实时数据:MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

2、数据缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载。

3、高伸缩性场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。

4、对象或 JSON 数据存储:MongoDB 的 BSON 数据格式非常适合文档化格式的存储及查询。

  • 不适应场景

1、高度事务性系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。

2、传统的商业智能应用:针对特定问题的 BI 数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。

3、需要复杂 SQL 查询的场景。

  • MongoDB 中的库、集合、文档

1、库:MongoDB 可以建立多个数据库,MongoDB 默认数据库为"db"。MongoDB 的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

2、集合:MongoDB 集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库中的表格)。集合存在于数据库中,集合没有固定的结构。

3、文档:MongoDB 的 Document 是一组键值(key-value)对(即 BSON),相当于关系型数据库的行。且不需要设置相同的字段,并且相同的字段不需要相同的数据类型。

5.MongoDB 的复制过程

  • Primary 节点写入数据,Secondary 通过读取 Primary 的 oplog(即 Primary 的 oplog.rs 表)得到复制信息,开始复制数据并且将复制信息写入到自己的 oplog。如果某个操作失败,则备份节点停止从当前数据源复制数据。如果某个备份节点由于某些原因挂掉了,当重新启动后,就会自动从 oplog 的最后一个操作开始同步。同步完成后,将信息写入自己的 oplog,由于复制操作是先复制数据,复制完成后再写入 oplog,有可能相同的操作会同步两份,MongoDB 设定将 oplog 的同一个操作执行多次,与执行一次的效果是一样的。

  • 当 Primary 节点完成数据操作后,Secondary 的数据同步过程如下:

  • 检查自己 local 库的 oplog.rs 集合找出最近的时间戳。

  • 检查 Primary 节点 local 库 oplog.rs 集合,找出大于此时间戳的记录。

  • 将找到的记录插入到自己的 oplog.rs 集合中,并执行这些操作。

6.MongoDB 副本集及其特点

MongoDB 副本集是一组 Mongod 维护相同数据集的实例,副本集可以包含多个数据承载点和多个仲裁点。在承载数据的节点中,仅有一个节点被视为主节点,其他节点称为次节点。

主要特点:

  • N 个节点的集群,任何节点可作为主节点,由选举产生;

  • 最小构成是:primary,secondary,arbiter,一般部署是:primary,2 secondary。

  • 所有写入操作都在主节点上,同时具有自动故障转移,自动恢复;

  • 成员数应该为奇数,如果为偶数的情况下添加 arbiter,arbiter 不保存数据,只投票。

MongoDB 复制(本)集原理

  • mongodb 的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

  • mongodb 各个节点常见的搭配方式为:一主一从、一主多从。

  • 主节点记录在其上的所有操作 oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB 有哪些特殊成员

MongoDB 中 Secondary 角色存在一些特殊的成员类型:

· Priority 0(优先级 0 型):不能升为主,可以用于多数据中心场景;

· Hidden(隐藏型):对客户端来说是不可见的,一般用作备份或统计报告用;

· Delayed(延迟型):数据比副集晚,一般用作 rolling backup 或历史快照。

· Vote(投票型):仅参与投票。

二.MongoDB 分片集群

MongoDB 分片集群(Sharded Cluster):主要利用分片技术,使数据分散存储到多个分片(Shard)上,来实现高可扩展性。

分片是将数据水平切分到不同的物理节点。当数据量越来越大时,单台机器有可能无法存储数据或读取写入吞吐量有所降低,利用分片技术可以添加更多的机器来应对数据量增加以及读写操作的要求。

1、MongoDB 分片集群相对副本集的优势

MongoDB 分片集群主要可以解决副本集如下的不足:

1、副本集所有的写入操作都位于主节点;

2、延迟的敏感数据会在主节点查询;

3、单个副本集限制在 12 个节点;

4、当请求量巨大时会出现内存不足;

5、本地磁盘不足;

6、垂直扩展价格昂贵。

2、MongoDB 分片集群的优势

MongoDB 分片集群主要有如下优势:

  • 使用分片减少了每个分片需要处理的请求数:通过水平扩展,群集可以提高自己的存储容量。比如,当插入一条数据时,应用只需要访问存储这条数据的分片。

  • 使用分片减少了每个分片存储的数据:分片的优势在于提供类似线性增长的架构,提高数据可用性,提高大型数据库查询服务器的性能。当 MongoDB 单点数据库服务器存储成为瓶颈、单点数据库服务器的性能成为瓶颈或需要部署大型应用以充分利用内存时,可以使用分片技术。

3、MongoDB 分片集群的架构组件

MongoDB 架构组件主要有:

  • Shard:用于存储实际的数据块,实际生产环境中一个 shard server 角色可由几台机器组成一个 replica set 承担,防止主机单点故障。

  • Config Server:mongod 实例,存储了整个 ClusterMetadata,其中包括 chunk 信息。

  • Query Routers:前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

4、MongoDB 分片集群和副本集群的区别

  • 副本集不是为了提高读性能存在的,在进行 oplog 的时候,读操作是被阻塞的;

  • 提高读取性能应该使用分片和索引,它的存在更多是作为数据冗余,备份。

5、MongoDB 的几种分片策略及其相互之间的差异

MongoDB 的数据划分是基于集合级别为标准,通过 shard key 来划分集合数据。

主要分片策略有如下三种:

1、 范围划分:**通过 shard key 值将数据集划分到不同的范围就称为基于范围划分。对于数值型的 shard key:可以虚构一条从负无穷到正无穷的直线(理解为 x 轴),每个 shard key 值都落在这条直线的某个点上,然后 MongoDB 把这条线划分为许多更小的没有重复的范围成为块(chunks),一个 chunk 就是某些最小值到最大值的范围。

2、散列划分:****MongoDB 计算每个字段的 hash 值,然后用这些 hash 值建立 chunks。基于散列值的数据分布有助于更均匀的数据分布,尤其是在 shard key 单调变化的数据集中。

3、自定义标签划分:****MongoDB 支持通过自定义标签标记分片的方式直接平衡数据分布策略,可以创建标签并且将它们与 shard key 值的范围进行关联,然后分配这些标签到各个分片上,最终平衡器转移带有标签标记的数据到对应的分片上,确保集群总是按标签描述的那样进行数据分布。标签是控制平衡器行为及集群中块分布的主要方法。

差异:

1、基于范围划分对于范围查询比较高效。假设在 shard key 上进行范围查询,查询路由很容易能够知道哪些块与这个范围重叠,然后把相关查询按照这个路线发送到仅仅包含这些 chunks 的分片。

2、基于范围划分很容易导致数据不均匀分布,这样会削弱分片集群的功能。

3、基于散列划分是以牺牲高效范围查询为代价,它能够均匀的分布数据,散列值能够保证数据随机分布到各个分片上。

6、MongoDB 分片集群采取什么方式确保数据分布的平衡

新加入的数据及服务器都会导致集群数据分布不平衡,MongoDB 采用两种方式确保数据分布的平衡:

拆分

  • 拆分是一个后台进程,防止块变得太大。当一个块增长到指定块大小的时候,拆分进程就会块一分为二,整个拆分过程是高效的。不会涉及到数据的迁移等操作。

平衡

  • 平衡器是一个后台进程,管理块的迁移。平衡器能够运行在集群任何的 mongd 实例上。当集群中数据分布不均匀时,平衡器就会将某个分片中比较多的块迁移到拥有块较少的分片中,直到数据分片平衡为止。

  • 分片采用后台操作的方式管理着源分片和目标分片之间块的迁移。在迁移的过程中,源分片中的块会将所有文档发送到目标分片中,然后目标分片会获取并应用这些变化。最后,更新配置服务器上关于块位置元数据。

7、 MongoDB 备份及恢复方式

mongodb 备份恢复方式通常有以下三种:

1、文件快照方式:此方式相对简单,需要系统文件支持快照和 mongod 必须启用 journal。可以在任何时刻创建快照。恢复时,确保没有运行 mongod,执行快照恢复操作命令,然后启动 mongod 进程,mongod 将重放 journal 日志。

2、复制数据文件方式:直接拷贝数据目录下的一切文件,但是在拷贝过程中必须阻止数据文件发生更改。因此需要对数据库加锁,以防止数据写入。恢复时,确保 mongod 没有运行,清空数据目录,将备份的数据拷贝到数据目录下,然后启动 mongod。

3、使用 mongodump 和 mongorestore 方式:在 Mongodb 中我们使用 mongodump 命令来备份 MongoDB 数据。该命令可以导出所有数据到指定目录中。恢复时,使用 mongorestore 命令来恢复 MongoDB 数据。该命令可以从指定目录恢复相应数据。

三.MongoDB部署方案

1、上传压缩包并解压

tar zxvf mongodb-linux-x86_64-4.0.13.tgz
mv mongodb-linux-x86_64-4.0.13 mongodb         #重命名

2、配置环境变量及配置文件

1.配置系统环境变量

vi /etc/profile
#mongodb
export PATH=$PATH:/opt/mongodb/bin             #mongo安装路径

2 创建MongoDB数据存放文件夹和日志记录文件夹,为后面的配置文件使用

mkdir -p /data/db
mkdir -p /logs

3 创建MongoDB运行时使用的配置文件

cd /opt/mongodb/bin
vim /mongodb.conf
dbpath = /data/db                              #数据文件存放目录
logpath = /logs/mongodb.log                    #日志文件存放目录
port = 27017                                   #端口
fork = true                                    #以守护程序的方式启用,即在后台运行
#auth=true                                     #需要认证。如果放开注释,就必须创建MongoDB的账号,使用账号与密码才可远程访问,第一次安装建议注释
bind_ip=0.0.0.0                                #允许远程访问,或者直接注释,127.0.0.1

3、启动mongodb

cd /opt/mongodb/bin
./mongod -f mongodb.conf                       #指定启动文件启动
netstat -nltp|grep mongod                      #查看服务


4、创建MongoDB的账号

cd /opt/mongodb/bin
./mongo                                        #运行mongo命令


mongodb的用户分两种,一种是管理员,一种是普通用户。

管理员管理普通用户、普通用户管理数据库数据

先创建管理员

下面是db的命令行操作:
>show dbs(可以列出数据库列表,方便查看)
>use admin
>db.createUser({user:'lmx',pwd:'123456',roles:[{role:'readWriteAnyDatabase',db:'admin'}]})

创建指定数据库testdb的用户,并且分配权限

>use config (你要设置用户的数据库名称)
>db.createUser({user:'hqq',pwd:'654321',roles:[{role:'readWrite',db:'config'}]})
>db.auth('hqq', '654321')
#返回 1 ,则说明用户密码设置ok


用户创建成功后,ctrl+c退出shell进程
需要重新启动mongodb服务,使权限生效

cd /opt/mongodb/
bin/mongod --config /opt/mongodb/bin/mongodb.conf -shutdown  #关掉服务
bin/mongod --config /opt/mongodb/bin/mongodb.conf -auth  #开启权限认证服务,需要附加--auth

>use admin
>show collections     #查看权限是否生效

5.Navicat 工具连接

MongoDB 数据库简介、安装及使用相关推荐

  1. MongoDB数据库简介及安装

    一.MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自"humongous",是一种开源 ...

  2. mongodb数据库的安装 for windows版本 0916

    mongodb数据库的安装 for windows版本 0916 官方下载 参考网址 Windows 平台安装 MongoDB | 菜鸟教程 https://www.runoob.com/mongod ...

  3. mongoDB 数据库简介

    背景概念-数据库类型 对比关系型数据库 优点 : 逻辑清晰.容易理解,结构类似表格 使用 sql 语句技术成熟,使用方便 数据一致性好,完整性好 关系型数据库比较成熟,可以使用一些复杂操作 缺点 : ...

  4. 测试linux mongodb数据库开启,安装配置MongoDB数据库

    安装配置MongoDB数据库 实验环境: 系统环境:rhel6 x64 selinux and iptables disabled 一.安装MongoDB [root@server1 ~]# ls m ...

  5. FreeBSD下MongoDB数据库的安装

    MongoDB是C++开发的一款开源.无模式的文档型数据库,具有高性能.易部署.易使用.数据存储方便等特点:MongoDB采用Bson(binary json)的形式存储数据,无锁,无事务,有索引,支 ...

  6. windows下MongoDB数据库的安装

    什么是NoSQL? NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. NoSQL用于超大规模数据的存储.(例 ...

  7. MongoDB数据库简介

    目录 1.MongoDB的优势 2.MongoDB的应用场合 3.MongoDB与SQL的术语对比 4.MongoDB数据库 5.MongoDB集合 5.MongoDB文档 6.ObjectId类型的 ...

  8. MongoDB 芒果数据库简介安装与基本操作(1)

    NoSQL简介 SQL 就是 Structor Query Language结构化查询语言. MySQL.Oracle.SQL Server都是SQL数据库.SQL缺点就是限制字段.SQL优点就是能够 ...

  9. hbase 数据库简介安装与常用命令的使用

    一:hbase 简介与架构功能 二:hbase 安装与配置 三:hbase 常见shell 命令操作 一:hbase 简介与架构功能 1.1 为什么要使用hbase 数据库 传统的RDBMS关系型数据 ...

  10. python3 [爬虫入门实战]爬虫之mongoDB数据库的安装配置与可视化

    从安装过程到可视化工具可查看数据信息,历时两天,昨天坐了一天的火车,今天早上才到的青岛–> 来放松心情. 前天说是要学习如何使用mongoDB的链接与安装. 到今天过去了将一天, 不过还是在函兮 ...

最新文章

  1. Spring笔记——2.使用Spring容器
  2. python基础之变量以及if语句
  3. 确保HIPAA符合远程医疗视频流的2种方法
  4. 第六讲:PrintClient工具的使用
  5. 让Spring架构减化事务配置(转)
  6. JSON数据格式---JSON语法规则、JSON文件
  7. 关于快速创建空表的纠正
  8. java21天打卡-day14 日期时间
  9. 【人脸识别】基于matlab GUI PCA人脸识别【含Matlab源码 748期】
  10. php页面增加js代码,php刷新当前页面_php js实现页面数据刷新的代码
  11. Learning the Model Update for Siamese Trackers论文解读
  12. 数字中国城市巡礼之开封:千年古都的智慧新生
  13. endnote的enl文件格式_endnoteenl文件丢失(一步简单还原丢失文件)
  14. linux可视化界面黑屏,Fedora 14 不能进入图形界面 显示黑屏的解决办法
  15. 一次Linux中的木马病毒解决经历
  16. python实现AI抠图
  17. RxJava 驯服数据流之副作用
  18. Linux云计算网络服务CentOS7.5
  19. 软件发展新方向-新技术革命
  20. 宣传部第二学期第一次培训

热门文章

  1. js模板引擎template.js的使用
  2. 别催了,医药行业数字化转型真的“急不得”
  3. seaweedfs java_seaweedfs-java-client
  4. oracle双机热备份方法(转)
  5. java 蔡学镛_蔡学镛谈“Linux + Java 会得到什么”
  6. 云计算对21世纪IT人才的挑战
  7. 解决电脑双网卡不能同时连接内网和外网的问题
  8. 动态规划之LCS算法
  9. 三维点云:学习+了解
  10. 41款非常有创意的卡通图标大全可爱