1.MongoDB简介


MongoDB 的(来自于英文单词“了 Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业,各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。
MongoDB 以一种叫做 BSON(二进制 JSON)的存储形式将数据作为文档存储。具有相似结构的文档通常被整理成集合。可以把这些集合看成类似于关系数据库中的表: 文档和行相似, 字段和列相似。

2 MongoDB 数据格式

2.1.1 JSON


JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括 C、 C++、 C#、 Java、JavaScript、 Perl、Python 等)。这些特性使 JSON 成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。JSON 的官方 MIME 类型是 application/json,文件扩展名是.json。

MongoDB 使用 JSON(JavaScript ObjectNotation)文档存储记录。
JSON 简单说就是 JavaScript 中的对象和数组,通过对象和数组可以表示各种复杂的结构。

对象:
对象在 js 中表示为“{}”括起来的内容,数据结构为 {key: value,key: value,…}的键值对的结构,在面向对象的语言中, key 为对象的属性, value 为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
例如: {"FirstName":"ke","LastName":"me","email":"hikeme@aa"}
取值方式和所有语言中一样,使用 key 获取,字段值的类型可以是 数字、字符串、数组、对象几种。

2.1.2 BSON


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

它的优点是灵活性高,但它的缺点是空间利用率不是很理想。
BSON 有三个特点:轻量性、可遍历性、高效性。
对JSON 来说,数据存储是无类型的,比如你要修改基本一个值,从 9 到 10,由于从一个字符变成了两个,所以可能其后面的所有内容都需要往后移一位才可以。而使用 BSON,你可以指定这个列为数字列,那么无论数字从 9 变到 10 还是 100,我们都只是在存储数字的那一位上进行修改,不会导致数据总长变大。当然,在 MongoDB 中,如果数字从整形增大到长整型,还是会导致数据总长变大的。

有时 BSON 相对 JSON 来说也并没有空间上的优势,比如对{“sex”:1},在 JSON 的存储上1只使用了一个字节,而如果用 BSON,那就是至少 4 个字节

2.2 MongoDB 特点


高性能: Mongodb 提供高性能的数据持久性,尤其是支持嵌入式数据模型减少数据库系统上的I/O 操作,索引支持更快的查询,并且可以包括嵌入式文档和数组中的键

丰富的语言查询: Mongodb 支持丰富的查询语言,支持读写操作(CRUD)以及数据汇总,文本搜索和地理空间索引高可用性: Mongodb 的复制工具,成为副本集,提供自动故障转移和数据冗余,水平可扩展性: Mongodb 提供了可扩展性,作为其核心功能的一部分,分片是将数据分在一组计算机上。

支持多种存储引擎: WiredTiger 存储引擎和、 MMAPv1 存储引擎和 InMemory 存储引擎

2.3 MongoDB 包含的程序


MongoDB Drivers
官方 MongoDB 客户端库提供 C, C ++, C#, Java, Node.JS, Perl, PHP,Python, Ruby和Scala 驱动程序的参考指南。

MongoDB Stitch
为开发人员提供了一个 API 到 MongoDB 和其他后端服务。保持 MongoDB 的全部功能和灵性,同时受益于强大的系统来配置细粒度的数据访问控制。

MongoDB Atlas
MongoDB 在云中部署,操作和扩展的最佳方式。适用于 AWS,Azure 和 Google Cloud Platform。轻松将数据迁移到 MongoDB Atlas,零停机

MongoDB Cloud Manager
是一个用于管理 MongoDB 部署的软件包。 Ops Manager 提供 Ops Manager 监控和 Ops Manager 备份,可帮助用户优化群集并降低操作风险

MongoDB Charts
可以最快速最简单的创建 Mongodb 可视化图表

MongoDB Connector for BI
MongoDB 商业智能连接器(BI)允许用户使用 SQL 创建查询,并使用现有的关系商业智能工具(如 Tableau, MicroStrategy 和 Qlik)对其 MongoDB Enterprise 数据进行可视化,图形化和报告。

MongoDB Compass
通过从集合中随机抽样一个文档子集,为用户提供其 MongoDB 模式的图形视图。采样文件可最大程度地降低对数据库的影响,并能快速产生结果。

MongoDB Spark Connector
使用连接器,您可以访问所有使用 MongoDB 数据集的 Spark 库:用 SQL 进行分析的数据集(受益于自动模式推理),流式传输,机器学习和图形 API,您也可以使用连接器与 Spark Shell。


下面开始进入安装步骤

官方下载地址
https://www.mongodb.com/try/download/community
下载完毕后我们先规划好目录再安装

[root@ly001 ~]# yum install -y libcurl openssl   #这里先下载一些可能用到的文件
[root@ly001 ~]# mkdir -p /opt/mongodb_app
[root@ly001 ~]# mkdir -p /opt/mongodb_app/data/soft
[root@ly001 ~]# cd /opt/mongodb_app/data/soft/

将安装包放到刚创建的soft目录然后进行解压到/opt/mongodb_app/目录下

[root@ly001 soft]# ls
mongodb-linux-x86_64-3.6.13.tgz
[root@ly001 soft]# tar -xvf mongodb-linux-x86_64-3.6.13.tgz -C /opt/mongodb_app/
mongodb-linux-x86_64-3.6.13/THIRD-PARTY-NOTICES.gotools
mongodb-linux-x86_64-3.6.13/README
mongodb-linux-x86_64-3.6.13/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-3.6.13/MPL-2
mongodb-linux-x86_64-3.6.13/LICENSE-Community.txt
mongodb-linux-x86_64-3.6.13/bin/mongodump
mongodb-linux-x86_64-3.6.13/bin/mongorestore
mongodb-linux-x86_64-3.6.13/bin/mongoexport
mongodb-linux-x86_64-3.6.13/bin/mongoimport
mongodb-linux-x86_64-3.6.13/bin/mongostat
mongodb-linux-x86_64-3.6.13/bin/mongotop
mongodb-linux-x86_64-3.6.13/bin/bsondump
mongodb-linux-x86_64-3.6.13/bin/mongofiles
mongodb-linux-x86_64-3.6.13/bin/mongoreplay
mongodb-linux-x86_64-3.6.13/bin/mongoperf
mongodb-linux-x86_64-3.6.13/bin/mongod
mongodb-linux-x86_64-3.6.13/bin/mongos
mongodb-linux-x86_64-3.6.13/bin/mongo
mongodb-linux-x86_64-3.6.13/bin/install_compass
[root@ly001 soft]# 
[root@ly001 soft]# cd /opt/mongodb_app/
[root@ly001 mongodb_app]# ls
data  mongodb-linux-x86_64-3.6.13
[root@ly001 mongodb_app]# ln -s mongodb-linux-x86_64-3.6.13 mongodb  #创建软连接,当然也可以改名
[root@ly001 mongodb_app]# mkdir -p /opt/mongodb_app/mongo_27017/{conf,logs,pid} 
[root@ly001 mongodb_app]# mkdir -p /opt/mongodb_app/data/mongo_27017

然后编写配置文件,记得将ip换成自己的主机

cat > /opt/mongodb_app/mongo_27017/conf/mongodb.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /opt/mongodb_app/mongo_27017/logs/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /opt/mongodb_app/data/mongo_27017
  directoryPerDB: true
  wiredTiger:
     engineConfig:
        cacheSizeGB: 1
        directoryForIndexes: true
     collectionConfig:
         blockCompressor: zlib
     indexConfig:
        prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/mongodb_app/mongo_27017/pid/mongod.pid

net:
  port: 27017
  bindIp: 127.0.0.1,192.168.121.133
EOF

配置好文件就可以启动mongodb了,执行启动命令后看到下面的结果就是mongodb启动成功了

[root@ly001 mongodb_app]# /opt/mongodb_app/mongodb/bin/mongod -f /opt/mongodb_app/mongo_27017/conf/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 5370
child process started successfully, parent exiting
[root@ly001 mongodb_app]# 

然后查看端口确认mongodb的启动情况,如果是启动几秒后自己挂掉就是配置有问题了

[root@ly001 mongodb_app]# ps aux | grep mongo
root       5370  0.4  5.0 990936 50708 ?        Sl   17:13   0:01 /opt/mongodb_app/mongodb/bin/mongod -f /opt/mongodb_app/mongo_27017/conf/mongodb.conf
root       5406  0.0  0.0 112812   980 pts/0    S+   17:18   0:00 grep --color=auto mongo
[root@ly001 mongodb_app]# netstat -pantul | grep 27017
tcp        0      0 192.168.121.133:27017   0.0.0.0:*               LISTEN      5370/mongod         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      5370/mongod         
[root@ly001 mongodb_app]# 

mongodb起来以后配置我们的环境变量就可以入了

[root@ly001 mongodb_app]# echo "PATH=\$PATH:/opt/mongodb_app/mongodb/bin" >> /etc/profile
[root@ly001 mongodb_app]# tail -1 /etc/profile
PATH=$PATH:/opt/mongodb_app/mongodb/bin
[root@ly001 mongodb_app]# source /etc/profile
[root@ly001 mongodb_app]# mongo

进去以后就是下面这样了,那些警告不用管,因为一些认证啊啥的没有弄,所以才会有

当然还有关闭的命令,就是在启动命令后面加上 --shutdown     关闭后27017的进程就没有了

[root@ly001 mongodb_app]# /opt/mongodb_app/mongodb/bin/mongod -f /opt/mongodb_app/mongo_27017/conf/mongodb.conf --shutdown
killing process with pid: 5454
[root@ly001 mongodb_app]# netstat -pantul | grep 27017
[root@ly001 mongodb_app]# 

至此monggodb的安装就完成了

当然这个启动命令的是不是又长又臭

所以下面扩展一下用systemcltd来管理的方法

直接执行下面这段代码

cat >/usr/lib/systemd/system/mongodb.service<< EOF
[Unit]
Description=mongodb
After=network.target

[Service]
Type=forking
ExecStart=/opt/mongodb_app/mongodb/bin/mongod --config /opt/mongodb_app/mongo_27017/conf/mongodb.conf
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/opt/mongodb_appmongodb/bin/mongod --config /opt/mongodb_app/mongo_27017/conf/mongodb.conf --shutdown
PrivateTmp=true

[vInstall]
WantedBy=multi-user.target
EOF

重新加载一下,就可以用systemctl命令来管理mongodb了

[root@ly001 mongodb_app]# systemctl daemon-reload
[root@ly001 mongodb_app]# systemctl status mongodb.service 
● mongodb.service - mongodb
   Loaded: loaded (/usr/lib/systemd/system/mongodb.service; static; vendor preset: disabled)
   Active: inactive (dead)

Sep 06 18:02:21 ly001 systemd[1]: [/usr/lib/systemd/system/mongodb.service:12] Unknown section 'v...ring.
Hint: Some lines were ellipsized, use -l to show in full.
[root@ly001 mongodb_app]# 

启动看下结果,显示正常      (额,这里代码原因没有显示绿色的圆点,我还是截图吧)

[root@ly001 mongodb_app]# systemctl start mongodb.service 
[root@ly001 mongodb_app]# systemctl status mongodb.service 
● mongodb.service - mongodb
   Loaded: loaded (/usr/lib/systemd/system/mongodb.service; static; vendor preset: disabled)
   Active: active (running) since Wed 2023-09-06 18:03:47 HKT; 5s ago
  Process: 5565 ExecStart=/opt/mongodb_app/mongodb/bin/mongod --config /opt/mongodb_app/mongo_27017/conf/mongodb.conf (code=exited, status=0/SUCCESS)
 Main PID: 5567 (mongod)
   CGroup: /system.slice/mongodb.service
           └─5567 /opt/mongodb_app/mongodb/bin/mongod --config /opt/mongodb_app/mongo_27017/conf/mongo...

Sep 06 18:03:46 ly001 systemd[1]: Starting mongodb...
Sep 06 18:03:46 ly001 mongod[5565]: about to fork child process, waiting until server is ready for...ons.
Sep 06 18:03:46 ly001 mongod[5565]: forked process: 5567
Sep 06 18:03:47 ly001 mongod[5565]: child process started successfully, parent exiting
Sep 06 18:03:47 ly001 systemd[1]: Started mongodb.
Hint: Some lines were ellipsized, use -l to show in full.
[root@ly001 mongodb_app]# 

mongodb的安装到这里就结束了

祝大家安装都能成功

 写这个的时候有参考其他文章,如有侵权请告知删除

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐