# mongodb 体系结构


<!--more-->


## 1.NoSql和Mongodb

- nosql

  NoSQL=NotOnlySQL，支持类似SQL的功能，与RelationalDatabase相辅相成。其性能较高，不使用SQL意味着没有结构化的存储要求(SQL为结构化的查询语句)，没有约束之后架构更加灵活。

  NoSQL数据库四大家族

  - 列存储Hbase,
  - 键值(Key-Value)存储Redis
  - 图像存储Neo4j
  - 文档存储MongoDB

- mongodb

  MongoDB是一个基于分布式文件存储的数据库，由C++编写，可以为WEB应用提供可扩展、高性能、易部署的数据存储解决方案。
  MongoDB是一个介于关系数据库和非关系数据库之间的产品，是非关系数据库中功能最丰富、最像关系数据库的。在高负载的情况下，通过添加更多的节点，可以保证服务器性能。

## 2.mongodb体系结构

![img](https://img.zhaojq.top/20260727091747068.png "img")

## 3.mongodb与RDBMS(关系型数据库)对比

![img_1](https://img.zhaojq.top/20260727091747220.png "img_1")

## 4.BSON

BSON是一种类json的一种二进制形式的存储格式，简称BinaryJSON，它和JSON一样，支持内嵌的文档对象和数组对象，但是BSON有JSON没有的一些数据类型，如**Date**和**BinaryData**类型。

BSON可以做为网络数据交换的一种存储形式,是一种schema-less的存储形式，它的优点是灵活性高，但它的缺点是空间利用率不是很理想。

`{key:value,key2:value2}`这是一个BSON的例子，其中key是字符串类型,后面的value值，它的类型一般是**字串**,double,Array,ISODate等类型。

BSON有三个特点：轻量性、可遍历性、高效性

## 5.BSON在mongodb中的使用

MongoDB使用了BSON这种结构来存储数据和网络数据交换。把这种格式转化成一文档这个概念(Document)，这里的一个Document也可以理解成关系数据库中的一条记录(Record)，只是这里的Document的变化更丰富一些，如Document可以嵌套。

MongoDB中Document中可以出现的数据类型![img_2](https://img.zhaojq.top/20260727091747461.png "img_2")

## 6.linux安装mongodb

MongoDB 源码下载地址：https://www.mongodb.com/download-center#community

```shell
1. 下载 
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.13.tgz
2. 解压
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.13.tgz
3. 启动
./bin/mongod
4. 指定配置文件启动
./bin/mongod -f mongo.conf

配置文件样例: 
dbpath=/data/mongo/ 
port=27017 
bind_ip=0.0.0.0 
fork=true 
logpath = /data/mongo/MongoDB.log 
logappend = true 
auth=false
```

## 7.启动参数说明

```
参数    说明 
dbpath  数据库目录，默认/data/db 
port    监听的端口，默认 27017 
bind_ip 监听IP地址，默认全部可以访问 
fork    是否已后台启动的方式登陆 
logpath 日志路径 
logappend 是否追加日志 
auth     是开启用户密码登陆 
config   指定配置文件
```

## 8.mongo shell启动

```shell
启动mongo shell 
	./bin/mongo 
指定主机和端口的方式启动 
	./bin/mongo --host=主机IP --port=端口
```

```shell
#这里我们示例配置用户名密码
1. 指定mongo.conf启动,auth=false, 记得先创建conf文件配置的目录
./bin/mongod -f mongo.conf
2. 连接mongo, 在mongo bin目录下
./mongo --host 127.0.0.1 --port 27017
3. 创建用户
use admin;
db.createUser({user: "root", pwd: "123456", roles:["root"]})
4. quit(); 退出
5. 修改mongo.conf 
auth = true
6. kill 掉进程, 重启
7. 使用客户端工具连接
```

## 9.mongodb GUI工具

-   MongoDB Compass Community

  MongoDBCompassCommunity由MongoDB开发人员开发，这意味着更高的可靠性和兼容性。它为MongoDB提供GUI mongodb工具，以探索数据库交互,具有完整的CRUD功能并提供可视方式。借助内置模式可视化，用户可以分析文档并显示丰富的结构。为了监控服务器的负载，它提供了数据库操作的实时统计信息。就像MongoDB一样，Compass也有两个版本，一个是Enterprise（付费），社区可以免费使用。适用于Linux，Mac或Windows。

- nosql booster

  NoSQLBooster是MongoDBCLI界面中非常流行的GUI工具。它正式名称为MongoBooster。

  NoSQLBooster是一个跨平台，它带有一堆mongodb工具来管理数据库和监控服务器。这个Mongodb 工具包括服务器监控工具，VisualExplainPlan，查询构建器，SQL查询，ES2017语法支持等等......它有免费，个人和商业版本，当然，免费版本有一些功能限制。NoSQLBooster也可用于Windows，MacOS和Linux。












