一、MongoDB简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器的性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
二、MongoDB相关术语
在mongodb中基本的术语包括:数据库、集合、文档
下表将帮助您更容易理解Mongo中的一些概念:
SQL术语 | MongoDB术语 | 说明 |
database | database | 数据库 |
table | collection | 数据表/集合 |
row | document | 数据行/文档 |
column | field | 数据列/字段 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
通过下图实例,我们也可以更直观地了解Mongo中的一些概念:
三、MongoDB应用场景
跟一些同事讨论 MongoDB 业务场景时,会听到类似『这个场景关系型数据库也能解决,没必要一定用 MongoDB』的声音,的确,并没有某个业务场景必须要使用 MongoDB才能解决,但使用 MongoDB 通常能让我们以更低的成本解决问题(包括学习、开发、运维等成本)
3.1、适用的场景
1、网站实时数据处理:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2、缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由M ongo搭建的持久化缓存层可以避免下层的数据源过载。
3、大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵, 在此之前,很多时候程序员往往会选择传统的文件进行存储。
4、高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。
5、用于对象及 JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
3.2、不适用的场景
1、要求高度事务性的系统。例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序
2、传统的商业智能应用。针对特定问题的BI数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
3、复杂的跨文档(表)级联查询。
3.3、业务应用场景
MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用场景
- 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
- 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
- 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
- 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备上报的遥测信息,并对这些信息进行多维度的分析
- 视频直播,使用 MongoDB 存储用户信息、礼物信息等
四、基于docker安装MongoDB
4.1、获取MongoDB镜像
docker search mongo //搜索MongoDB镜像
docker pull mongo //拉取最新的MongoDB镜像
4.2、创建和启动容器
docker run \
--name mongodb \
--restart=always \
-p 27017:27017 \
-v /mydata/mongodb/configdb:/data/configdb/ \
-v /mydata/mongodb/db/:/data/db/ \
-d mongo
说明: --v为本地和容器内做映射,--restart=always是自动重启
4.3、使用MongoDB客户端进行操作
1、进入容器
docker exec -it mongodb bash
2、登录MongoDB
进入容器后,执行:mongo
3、数据库常用操作
1、切换/创建数据库
use xdp
如果数据库不存在,则创建数据库,否则切换到指定数据库
2、查询所有数据库
show dbs;
3、 删除当前使用的数据库
db.dropDatabase();
4、 查看当前使用的数据库
db.getName();
5、 显示当前db状态
db.stats();
6、 当前db版本
db.version();
7、 查看当前db的链接地址
db.getMongo();
四、小结
本篇主要是介绍了MongoDB的一些专业术语和适用场景,讲明白了MongoDB是什么,能干什么,以及基于docker的方式快速安装,下一篇重点介绍MongoDB的使用。