MongoDB 数据库

1. NoSQL 简介

简介

关系型数据库遇到的问题

2008 年左右,网站 、 论坛、社交网络开始高速发展,关系型数据库的地位受到了很大的挑战 。关系型数据库的以下问题逐渐凸显:
• 难以应付每秒上万次的高并发数据写入 。
• 查询上亿量级数据的速度极其缓慢 。
• 分库、分表形成的子库到达一定规模后难以进一步扩展 。
• 分库、分表 的规则可能会因为需求变更而发生变更。
• 修改表结构困难 。
在很多 互联网应用场景下 , 对数据联表的查询需求不是那么强烈 ,也并不需要在数据写入后立刻读取,但对数据的读取和并发写入速度有非常高的要求 。 在这样的情况下 ,非关系型数据库得到高速的发展 。
2009 年,分布式文档型数据库 MongoDB 引 发了 一场去 SQL 的浪潮 。

什么是 NoSQL 数据库

MongoDB 就是这样一款非关系型的数据库,什么叫非关系型?就是把数据直接放进一个大仓库,不标号、不连线、单纯的堆起来。传统数据库由于受到各种关系的累赘,各种数据形式的束缚,难以处理海量数据以及超高并发的业务场景。

为了解决上述问题,必须有一款自废武功,以求在更高层次上突破瓶颈的数据库系统。就像张无忌忘记招式从而学习太极一样,摈弃了固有模式的 MongoDB 才能应对 Facebook 上亿比特的海量数据。

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
在现代的计算系统上每天网络上都会产生庞大的数据量,这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。

1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。

通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

NoSQL 数据库有哪些特点
• 可弹性扩展
• BASE 特性
• 大数据量、高性能
• 灵活的数据模型
• 高可用

NoSQL 数据库有哪些种类

  1. 键值数据库
    这类数据库主要是使用数据结构中的键 Key 来查找特定的数据Value。
    • 优点:在存储时不采用任何模式,因此极易添加数据
    这类数据库具有极高的读写性能,用于处理大量数据的高访问负载比较合适。
    键值对数据库适合大量数据的高访问及写入负载场景,例如日志系统。
    主要代表是 Redis、Flare。

  2. 文档型数据库
    这类数据库满足了海量数据的存储和访问需求,同时对字段要求不严格,可以随意增加、删除、修改字段,且不需要预先定义表结构,所以适用于各种网络应用。
    主要代表是 MongoDB、CouchDB。

  3. 列存储型数据库
    主要代表是 Cassandra 、Hbase。
    这类数据库查找速度快,可扩展性强,适合用作分布式文件存储系统。

  4. 图数据库
    主要代表是 InfoGrid 、Neo4J 。
    这类数据库利用“图结构”的相关算法来存储实体之间的关系信息,适合用于构建社交网络和推荐系统的关系图谱。

NoSQL 与 RDB 该怎么选择

NoSQL 并不能完全取代关系型数据库,NoSQL
主要被用来处理大量且多元数据的存储及运算问题。在这样的特性差异下,我们该如何选择合适的数据库以解决数据存储与处理问题呢?这里提供以下几点作为判断依据。

  1. 数据模型的关联性要求
    NoSQL 适合模型关联性比较低的应用。因此:
    • 如果需要多表关联,则更适合用 RDB
    • 如果对象实体关联少,则更适合用 NoSQL 数据库
    • 其中 MongoDB 可以支持复杂度相对高的数据结构,能够将相关联的数据以文档的方式嵌入,从而减少数据之间的关联操作
  2. 数据库的性能要求
    如果数据量多切访问速度至关重要,那么使用 NoSQL 数据库可能是比较合适的。NoSQL 数据库能通过数据的分布存储大幅地提供存储性能。
  3. 数据的一致性要求
    NoSQL 数据库有一个缺点:其在事务处理与一致性方面无法与 RDB 相提并论。
    因此,NoSQL 数据库很难同时满足强一致性与高并发性。如果应用对性能有高要求,则 NoSQL 数据库只能做到数据最终一致。
  4. 数据的可用性要求
    考虑到数据不可用可能会造成风险,NoSQL 数据库提供了强大的数据可用性(在一些需要快速反馈信息给使用者的应用中,响应延迟也算某种程度的高可用)。
    一个项目并非只选择一种数据库,可以将其拆开设计,将需要 RDB 特性的放到 RDB 中管理,而其它数据放到 NoSQL 中管理。

2. MongoDB 简介

MongoDB 有哪些特点

  • 灵活性
  • 可扩展性
  • 强大的查询语言
  • 优异的性能

MongoDB 适用于哪些场景

  1. 需要处理大量的低价值数据,且对数据处理性能有较高要求
    例如:聊天的微博数据就是不需要太高的事务性,但是对数据的存取性能有很高要求,就非常适合MongoDB
  2. 需要借助缓存层来处理数据
    因为MongoDB 能高效的处理数据,所以非常适合缓存层来使用,将MongoDB 作为持久化缓存层,可以避免底层存储的资源过载
  3. 需要高度的伸缩性
    对概念性数据库来说,当表的大小达到一定数量级后,其性能会急剧下降,这时候可以使用多台MongoDB 服务器搭建一个集群环境,实现最大程度的扩展,并且不影响性能

MongoDB 安装

官网地址:https://docs.mongodb.com/manual/installation/

在 Windows 中安装 MongoDB

方式一:使用 .msi 安装程序快速安装
方式二:下载安装包手动安装

学习使用社区版就行

安装 MongoDB
这里以 Windows 手动安装 MongoDB 为例。

直接下载zip结尾格式,直接在一个稳定的目录下解压,加压后的就是MongoDB 的文件,主要是bin目录下是真正需要的文件
mongon.exe 的作用是启动MongoDB 数据库服务的,相当于数据库的后端
mongo.exe 提供的客户端,作用是连接数据库服务端,操作MongoDB 数据库中的数据
如果想在任意目录下使用mongon.exe或者mongo.exe,将执行文件的bin目录路径复制,配置环境变量,在此电脑右键选择属性,进入高级系统设置,找到环境变量,在系统变量中找到Path点击编辑,新建,将复制的路径粘贴进去,一直确定就配置好了

数据库不能通过直接打开方式,需要通过命令行打开

  1. 下载 MongoDB 安装包
    https://www.mongodb.com/try/download/community
  2. 解压压缩包,将解压出来的资源文件放到一个稳定的目录中
  3. 关于 MongoDB 软件包目录文件
    文件名 说明
    mongod.exe 服务端,用来启动数据库服务的
    mongo.exe 客户端,用来连接数据库服务操作数据库
  4. 将 MongoDB 安装包中的 bin 目录配置到环境 PATH 变量
    配置 PATH 环境变量的目的是为了能够在命令行中的任何位置都能够访问到 bin 目录中的可执行程序。
  5. 确认是否配置成功
mongod --version

注意:如果是配置环境变量之前打开的命令行,则需要在配置完环境变量之后将命令行重启才能生效。

  1. 启动和停止 MongoDB 数据库服务
    mongod 默认监听 127.0.0.1:27017。
    如果单独执行 mongod,它会默认使用执行 mongod 命令所处磁盘根目录/data/db 作为数据存储目录。
mongod --dbpath="数据存储目录"

说明

  • 关于 MongoDB 的版本号
    MongoDB 版本形式为 X.Y.Z,例如 4.4.2
    如果 Y 是奇数(例如 4.3),则为开发版,建议开发测试使用
    如果 Y 是偶数(例如 4.4),则为稳定版,建议生产环境使用

  • 从版本 3.2 之后不再支持 32 位操作系统

  • 推荐使用到的版本是最新稳定版 4.4
    Windows Server 2019
    Windows 10 / Windows Server 2016
    macOS 10.13 及更高版本
    MongoDB 不支持 WSL(Windows Subsystem for Linux)

连接MongoDB

mongo Shell
什么是 mongo Shell

  • mongo Shell 是 MongoDB 官方提供的一个在命令行中用来连接操作 MongoDB 服务的客户端工具
  • 使用 mongo Shell 可以对 MongoDB 数据库进行数据的管理
  • mongo Shell 包含在 MongoDB 服务器安装中。如果您已经安装了服务器,则 mongo Shell 将安装在与服务器二进制文件相同的位置。

启动 mongo Shell 并连接到 MongoDB

连接默认端口上的本地 MongoDB 服务
您可以在没有任何命令行选项的情况下运行 mongo shell,以使用默认端口 27017 连接到在本地主机上运行的 MongoDB 实例:

mongo

指定端口号

要明确指定端口,请包括 --port 命令行选项。例如,要使用非默认端口 28015 连接到在 localhost 上运行的 MongoDB 实例,请执行以下操作:
mongo --port 28015

连接远程主机上的 MongoDB 服务
连接远程主机上的 MongoDB 服务需要明确指定主机名和端口号。
您可以指定一个连接字符串。例如,要连接到在远程主机上运行的 MongoDB 实例,请执行以下操作:

mongo “mongodb://mongodb0.example.com:28015”

您可以使用命令行选项 --host <主机>:<端口>。例如,要连接到在远程主机上运行的 MongoDB 实例,请执行以下操作:

mongo --host mongodb0.example.com:28015

您可以使用–host 和–port 命令行选项。例如,要连接到在远程主机上运行的MongoDB实例,请执行以下操作:

mongo --host mongodb0.example.com --port 28015

连接具有身份认证的 MongoDB 服务
您可以在连接字符串中指定用户名,身份验证数据库以及可选的密码。例如,以alice用户身份连接并认证到远程MongoDB实例:
mongo "mongodb://alice@mongodb0.examples.com:28015/?authSource=admin"
您可以使用–username 和–password,–authenticationDatabase 命令行选项。例如,以alice用户身份连接并认证到远程MongoDB实例:

mongo --username alice --password --authenticationDatabase admin
–host mongodb0.examples.com --port 28015

mongo Shell 执行环境
• 提供了 JavaScript 执行环境
• 内置了一些数据库操作命令
• show dbs
• db
• use database
• show collections
• …
• 提供了一大堆的内置 API 用来操作数据库
• db.users.insert({ name: ‘Jack’, age: 18 })

退出连接
三种方式:
• exit
• quit()
• Ctrl + C

上一篇:大数据和云计算技术周报(第28期):NoSQL特辑


下一篇:Nosql数据库服务之redis