NoSQL 简介

NoSQL 简介

NoSQL 概念

NoSQL 全称 Not Only SQL,意即”不仅仅是 SQL”。我们每天产生的数据有很大一部分由关系数据库管理系统(RDBMS)来处理,通过应用实践证明,关系模型非常适合于客户服务器编程。NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至 2009 年趋势越发高涨。NoSQL 的拥护者们提倡运用非关系型的数据存储。

NoSQL 指的是非关系型的数据库,有时也称作 Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL 用于超大规模数据的存储,例如谷歌或 Facebook 每天为他们的用户收集万亿比特的数据。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

分布式系统概念

分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统,正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。分布式系统可以应用在不同的平台上,如 PC、工作站、局域网和广域网等。

分布式计算的优点

可靠性(容错):系统中部分节点发生故障时,其他节点可以继续提供服务。

可扩展性:可以根据需要增加节点来提升系统整体处理能力。

资源共享:网络中的硬件和软件资源可以被多个节点共同访问和使用。

灵活性:系统可以方便地添加新功能或替换旧组件而不影响整体运行。

更快的速度:通过并行处理和任务分发,多个节点同时工作可以缩短处理时间。

开放系统:基于标准协议和接口,不同厂商的设备和系统可以互相通信。

更高的性能:通过分布式架构将负载分散到多个节点,单点压力降低,整体吞吐量提升。

RDBMS vs NoSQL

RDBMS 特点:

高度组织化结构化数据

结构化查询语言(SQL)

数据和关系都存储在单独的表中

数据操纵语言,数据定义语言

严格的一致性

基础事务

NoSQL 特点:

代表着不仅仅是 SQL

没有声明性查询语言

没有预定义的模式

键 – 值对存储,列存储,文档存储,图形数据库

最终一致性,而非 ACID 属性

非结构化和不可预知的数据

CAP 定理

高性能,高可用性和可伸缩性

MongoDB 简介

MongoDB 概述

MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。

MongoDB 有两个服务器版本:Community 和 Enterprise。

MongoDB 下载

可以在 MongoDB 官网下载安装包,地址为:https://www.mongodb.com/download-center#community

直接下载地址(目前最新版 4.2):

http://dl.mongodb.org/dl/win32/x86_64

http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.4-signed.msi

MongoDB 提供很多语言的驱动包,可以通过这些语言去访问 MongoDB。

Windows 安装步骤

转到下载 MongoDB 安装程序的目录(.msi 文件),默认情况下是 Downloads 目录。双击 .msi 文件开始安装。

选择安装类型:可以选择”完整”(建议大多数用户使用)或”自定义”安装类型。”完整设置”选项会将 MongoDB 和 MongoDB 工具安装到默认位置。使用”自定义安装程序”选项,可以指定要安装的可执行文件以及安装位置。

服务配置:从 MongoDB 4.0 开始,可以在安装过程中将 MongoDB 设置为 Windows 服务,也可以仅安装二进制文件。以下内容将 MongoDB 安装并配置为 Windows 服务。从 MongoDB 4.0 开始,可以在安装过程中将 MongoDB 配置和启动为 Windows 服务,并在成功安装后启动 MongoDB 服务。

如果选择不将 MongoDB 配置为 Windows 服务,请取消勾选 Install MongoD as a Service。

创建一个 Windows 账号:mango,密码也是 mango。

MongoDB Compass 是一个图形界面管理工具,安装时可以选择不安装。中国大陆安装 MongoDB 数据库时,可以选择安装 Compass,但是容易卡死,原因是从美国服务器在线安装,可以手动下载后离线安装。

安装完成后需要重启电脑。

启动与连接

如果将 MongoDB 安装为 Windows 服务,成功安装后将启动 MongoDB 服务。要开始使用 MongoDB,请将 mongo.exe 连接到正在运行的 MongoDB 实例。可以在 Windows 资源管理器中转到 C:\Program Files\MongoDB\Server\4.2\bin\ 目录,双击 mongo.exe。

也可以使用配置文件配置 MongoDB 实例:<install directory>\bin\mongod.cfg

如果没有将 MongoDB 安装为 Windows 服务,仅安装了可执行文件,则必须手动启动 MongoDB 实例。

停止 MongoDB 服务

要停止或暂停 MongoDB 服务,使用服务控制台:在服务控制台中找到 MongoDB 服务,右键单击 MongoDB 服务,然后点击”停止”(或”暂停”)。

配置环境与启动连接

启动 MongoDB 数据库

要启动 MongoDB,需要运行 mongod.exe。基本启动命令如下:

"C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe" --dbpath="c:\data\db"Code language: JavaScript (javascript)

–dbpath 选项指向数据库目录,该目录必须提前存在。可以配置环境变量,将 MongoDB 的 bin 目录加入 PATH,这样就无需每次输入完整路径。

如果 MongoDB 数据库服务器运行正常,命令解释器会显示如下信息:

[initandlisten] waiting for connectionsCode language: CSS (css)

连接到 MongoDB

要将 mongo.exe 外壳连接到 MongoDB 实例,需要打开另一个具有管理权限的命令解释器,然后运行 mongo.exe。

"C:\Program Files\MongoDB\Server\4.2\bin\mongo.exe"Code language: CSS (css)

或者配置好环境变量后直接输入:

mongo

默认绑定地址说明

默认情况下,MongoDB 在启动时 bindIp 设置为 127.0.0.1,该绑定到 localhost 网络接口。这意味着 mongod.exe 只能接受来自同一计算机上运行的客户端的连接。除非将此值设置为有效的网络接口,否则远程客户端无法连接到 mongod.exe,且 mongod.exe 不能初始化副本集。

如果需要允许远程连接,可以在配置文件中修改 bindIp 参数,例如设置为 0.0.0.0 以监听所有网络接口,或指定具体的 IP 地址。修改配置文件 mongod.cfg 中的 net.bindIp 字段后重启服务生效。

MongoDB 概念解析

SQL 与 MongoDB 术语对照

SQL 术语/概念MongoDB 术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins不支持表连接,MongoDB 不支持
primary keyprimary key主键,MongoDB 自动将 _id 字段设置为主键

数据库

一个 MongoDB 实例中可以建立多个数据库。MongoDB 的默认数据库为 “db”,该数据库存储在 data 目录中。MongoDB 的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

show dbs 命令可以显示所有数据库的列表:

> show dbs

执行 db 命令可以显示当前数据库对象或集合:

> db

运行 use 命令可以连接到一个指定的数据库:

> use localCode language: PHP (php)

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库:

admin:从权限的角度来看,这是 “root” 数据库。将用户添加到这个数据库,该用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。

config:当 Mongo 用于分片设置时,config 数据库在内部使用,用于保存分片的相关信息。

文档

文档是一组键值(key-value)对,即 BSON。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别。

一个简单的文档例子:

{"site":"www.foxdevelop.com", "name":"foxdevelop"}Code language: JSON / JSON with Comments (json)

集合

集合就是 MongoDB 文档组,类似于 RDBMS 中的表格。集合存在于数据库中,集合没有固定的结构,意味着可以对集合插入不同格式和类型的数据,但通常插入集合的数据都会有一定的关联性。

比如可以将以下不同数据结构的文档插入到同一个集合中:

{"site":"www.bing.com"}
{"site":"www.google.com","name":"Google"}
{"site":"www.foxdevelop.com","name":"foxdevelop","num":5}Code language: JSON / JSON with Comments (json)

当第一个文档插入时,集合就会被创建。

MongoDB 数据类型

下表为 MongoDB 中常用的几种数据类型:

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据服务器分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON 元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。基本等同于字符串类型,用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式存储当前日期或时间。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

ObjectId

ObjectId 类似唯一主键,可以很快生成和排序,包含 12 个字节,含义如下:

前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚 8 个小时。

接下来的 3 个字节是机器标识码。

紧接的两个字节由进程 id 组成(PID)。

最后三个字节是随机数。

MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象。

由于 ObjectId 中保存了创建的时间戳,不需要为文档单独保存时间戳字段,可以通过 getTimestamp 函数来获取文档的创建时间:

> var newObject = ObjectId()
> newObject.getTimestamp()Code language: JavaScript (javascript)

ObjectId 可以转为字符串形式。

日期

日期类型表示当前距离 Unix 新纪元(1970年1月1日)的毫秒数。日期类型是有符号的,负数表示 1970 年之前的日期。

> var mydate1 = new Date()
> mydate1
> typeof mydate1Code language: JavaScript (javascript)

new Date() 创建的是格林尼治时间对象,typeof 返回 object。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注