初体验MongoDB

MongoDB 是免费开源的跨平台 NoSQL 数据库,命名源于英文单词 humongous,意思是「巨大无比」,可见开发组对 MongoDB 的定位。与关系型数据库不同,MongoDB 的数据以类似于 JSON 格式的二进制文档存储:
{
"name": "McConaughey",
"age": 18,
"hobbies": ["travel", "swimming"]
}文档型的数据存储方式有几个重要好处:文档的数据类型可以对应到语言的数据类型,如数组类型(Array)和对象类型(Object);文档可以嵌套,有时关系型数据库涉及几个表的操作,在 MongoDB 中一次就能完成,可以减少昂贵的连接花销;文档不对数据结构加以限制,不同的数据结构可以存储在同一张表。
MongoDB的适用场景
网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
大尺寸、低价值的数据:使用传统的关系型数据库存储一些大尺寸低价值数据时会比较浪费,在此之前,很多时候程序员往往会选择传统的文件进行存储。
高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持以及集群高可用的解决方案。
用于对象及JSON 数据的存储:Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。
MongoDB的行业具体应用
游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新。
物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
直播,使用 MongoDB 存储用户信息、礼物信息等。
那么,如何抉择是否使用MongoDB
| 应用特征 | Yes/No |
|---|---|
| 应用不需要复杂事务及复杂join支持 | 必须yes |
| 新应用,需求会变,数据模型无法确定,想快速迭代开发 | ? |
| 应用需要2000-3000以上的读写QPS(更高也可以) | ? |
| 应用需要TB甚至 PB 级别数据存储 | ? |
| 应用发展迅速,需要能快速水平扩展 | ? |
| 应用需要大量的地理位置查询、文本查询 | ? |
| 应用需要99.999%高可用 | ? |
有一个yes就可以选择MongoDB,两个以上yes,选MongoDB绝对不后悔
与关系型数据库比较 💎
MongoDB与RDMS(关系型数据库)比较,如下图所示
| RDMS | MongoDB |
|---|---|
| database(数据库) | database(数据库) |
| table (表) | collection( 集合) |
| row( 行) | document( BSON 文档) |
| column (列) | field (字段) |
| index(唯一索引、主键索引) | index (支持地理位置索引、全文索引 、哈希索引) |
| join (主外键关联) | embedded Document (嵌套文档) |
| primary key(指定1至N个列做主键) | primary key (指定_id field做为主键) |
什么是BSON 👻
BSON是一种类似于JSON的二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。BSON有三个特点:轻量性、可遍历性、高效性。
下表列出了MongoDB中Document可以出现的数据类型:
| 数据类型 | 说明 | document举例 |
|---|---|---|
| String | 字符串 | |
| Integer | 整型数值 | |
| Boolean | 布尔型 | |
| Double | 双精度浮点数 | |
| ObjectId | 对象id,用于创建文档的id | {_id:new ObjectId()} |
| Array | 数组 | |
| Timestamp | 时间戳 | |
| object | 内嵌文档 | {student:{name:“zhangsan”,age:18}} |
| null | 空值 | |
| Date或者ISODate | 日期时间 | |
| Code | 代码 | {setPersonInfo:function() |
MongoDB安装 💎
Mongodb包在默认的Ubuntu存储库中是不可使用的。首先需要导入包管理系统使用的公钥。
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -更新apt资源库
sudo apt update
sudo apt upgrade -y创建列表文件
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update安装libssl
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.18_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.18_amd64.deb安装mongodb
sudo apt install mongodb-org
#安装完成后,查看mongo的安装位置
whereis mongod启动MongoDB服务并检查MongoDB服务状态
sudo systemctl start mongod # 启动服务
sudo systemctl status mongod # 查看状态
sudo systemctl restart mongod # 重启
sudo systemctl enable mongod # 添加服务在系统启动的时候开启mongodb开启远程连接
vim /etc/mongod.conf
bindIp: 172.0.0.1 改为 bindIp: 0.0.0.0修改完成之后要记得重启服务
mongo shell 的启动
./usr/bin/mongosh 或者 mongosh之后,使用可视化工具进行连接即可

至此,本章节的学习就到此结束了,如有疑惑,可对接技术客服进行相关咨询。