当前位置:网站首页>MongoDB:一、MongoDB是什么?MongoDB的优缺点
MongoDB:一、MongoDB是什么?MongoDB的优缺点
2022-07-01 06:08:00 【伟大的伟群众的群】
本文全部内容以MongoDB4.2版本为基础。
文章目录
一、MongoDB是什么?
MongoDB是一个可扩展、开源、表结构自由,由C++编写面向文档的高性能分布式数据库。它更像是介于关系型数据库(RDBMS)和非关系型数据库(NoSQL)之间的数据库,是非关系型数据库中功能最丰富、最像关系型数据库的非关系型数据库。MongoDB支持的数据结构非常松散,是类似json的bson格式,可以存储比较复杂的数据类型。
1. MongoDB中的概念
为方便理解,下表以Mysql与MongoDB比较,Mysql中的表即对应MongoDB中的集合概念,Mysql中的行即对应MongoDB中的文档概念,数据库与索引的概念同Mysql一致。
| Mysql | Mongodb |
|---|---|
| database | database |
| table | collection |
| row | document |
| index | index |
2. MongoDB的优势与不足
首先引用官方文档的第一句话:
Welcome to the MongoDB 4.2 Manual! MongoDB is a document database designed for ease of development and scaling
翻译为中文即为:
欢迎使用MongoDB 4.2手册!MongoDB是一个文档数据库,旨在便于开发和扩展。
所以MongoDB设计之初想要提供的就是一个可以简化开发、支持扩展的数据库,同时它具有高性能、高可用的特点。
①简化开发: 数据是以类似于 JSON 文件的键值对形式的文档进行存储的,这种设计模式对数据的约束条件较少,同时文档对应于许多编程语言中的原生数据类型,十分便于开发。
②可扩展: 传统垂直扩展局限于单台服务器的性能。而MongoDB分片模式支持水平扩展,通过增加服务器数量来对数据库扩容。
③高性能: WiredTiger存储引擎下,数据写入内存即完成,持久化到硬盘的操作在后台异步完成。同时副本集的读写分离,分片模式的多写可以更大程度的提高吞吐量。
④高可用: 副本集模式会将数据同步在一到多个副本服务器,并支持故障自动转移,同时提供了数据的冗余备份,提高了数据的可用性, 保证了数据的安全性。
虽然MongoDB优点明显,在4.2版本也引入了分布式事务,但目前对事务性有较强要求的应用程序仍然不建议使用MongDB,另外在多个不同维度上对不同类型的数据进行连接是关系型数据库擅长的事情,此类场景同样不建议使用MongoDB。
二、MongoDB的特性
1. 嵌套文档模型
MongoDB的文档(为方便理解Mongo中的一个文档可以想象成Mysql的一条数据)采用类似Json的键值对格式存储数据,在Mongo中称为Bson。且MongoDB 文档可以将文档结构嵌入到文档中的字段或数组中,如下图所示。
嵌套文档模型允许应用程序将相关的信息片段存储在同一数据库记录中。因此,应用程序可以用更少的查询和更新来完成常见操作,提高了性能。而且这种非规范化数据模型将所有相关数据组合在一个文档中,而不是跨多个文档和集合进行规范化,有助于原子操作。
2. 模式自由
在关系型数据库中,我们必须要先声明一个表结构,而在MongoDB中默认不要求一个集合(可以理解为约等于Mysql中的表)内的文档拥有相同的字段,而且相同字段在不同的文档中也可以有不同的数据类型。如下所示第一条数据为姓名、年龄、性别,第二条数据为性别、年龄、身高。
> db.test.insert({
"name":"xiaoming","age":"18","sex":"男"});
WriteResult({
"nInserted" : 1 })
>
> db.test.insert({
"name":"xiaohong","age":"16","height":"165"});
WriteResult({
"nInserted" : 1 })
>
> db.test.find()
{
"_id" : ObjectId("62b49cda779f3b59142bb909"), "name" : "xiaoming", "age" : "18", "sex" : "男" }
{
"_id" : ObjectId("62b49d25779f3b59142bb90a"), "name" : "xiaohong", "age" : "16", "height" : "165" }
>
3.2版本开始MongoDB引入了指定验证规则,即在插入或更新时根据人为制定的校验规则进行数据校验。在3.6版本引入了Json模式的验证规则。
3. 可靠性
MongoDB支持副本集模式,提供数据实时备份与自动故障转移。
最小的副本集集群需要部署在3台服务器,分别为主节点(Primary)、从节点(Secondary)和仲裁节点(Arbiter)。主节点会将数据实时同步到从节点实现数据备份,若主节点异常时从节点会升级为主节点,实现自动故障转移。
4. 可扩展性
当考虑提升系统负荷时,通常会考虑进行垂直扩展或水平扩展。垂直扩展即在单台服务器增加CPU、内存、存储等资源,这种扩展方式严重挑战单台服务器的硬件限制,且扩容成本较高。水平扩展即通过增加服务器数量来提升系统承载力,不受单台服务器硬件限制,多台服务器共同协作,但相比垂直扩展操作较为复杂。
MongoDB的分片模式就是一种在多台机器分布数据的方法。可以使用分片模式来支持非常大的数据集和高吞吐量操作。分片模式各组件如下图所示。
5. 支持分布式事务
对于需要对多个文档进行原子性操作的情况,MongoDB在4.0版本开始支持副本集模式的多文档事务,4.2版本开始支持分片集群的事务,实现了分布式事务,至此MongoDB也可以实现全面替代关系型数据库的使用。使用分布式事务,可以跨多个操作、集合、数据库、文档和分片使用事务。
6. 文件存储
BSON限制一个文档最多存储16MB数据,如果我们的文件小于16MB,可以将文件转换为二进制数据以文档的形式存入集合。同时MongoDB也提供了用于存储和检索超过16 MB 的文件规范,即GridFS。
GridFS将文件拆分为块保存到多个文档中,这种方式使得我们想要读取文件的一部分信息时无需将整个文件加载到内存,面对大文件时可能比系统级文件系统效率更高。GridFS 不仅可用于存储超过 16 MB 的文件,还可存储任何文件,但MongoDB建议若我们想要存储的所有文件都小于16MB的限制时,应优先考虑将每个文件存储到单个文档中而非GridFS。
参考
《MongoDB核心原理与实践》郭远威 著
Mongodb官方文档:https://www.mongodb.com/docs/v4.2/
边栏推荐
- El tooltip in the table realizes line breaking display
- Essay learning record essay multi label Global
- QT write custom control - self drawn battery
- 健康照明中应用的LED照明灯
- 数据库er图组成要素
- Thesis learning record essay multi label lift
- In win10 and win11, the scroll direction of Elan touch panel is reversed, and "double finger click to open the right-click menu" and "double finger scroll" are started“
- Fragment upload and breakpoint resume
- 蚂蚁新村田头村变甜头村 让厦门灌口镇田头村变甜头村的特色农产品之一是
- Oracle create user + Role
猜你喜欢

让厦门灌口镇田头村变“甜头”村的特色农产品之一是

Seven major technical updates that developers should pay most attention to on build 2022

讓田頭村變甜頭村的特色農產品是仙景芋還是白菜

健康照明中应用的LED照明灯

The row and column numbers of each pixel of multi-source grid data in the same area are the same, that is, the number of rows and columns are the same, and the pixel size is the same

This is the necessary software for college students 𞓜 knowledge management

El tooltip in the table realizes line breaking display

Through cooperation with the University of international trade, we can increase efficiency for college students

JDBC database operation

让田头村变甜头村的特色农产品是仙景芋还是白菜
随机推荐
What if the data in the cloud disk is harmonious?
Fragment upload and breakpoint resume
FPGA - 7系列 FPGA内部结构之Clocking -02- 时钟布线资源
蚂蚁新村田头村变甜头村 让厦门灌口镇田头村变甜头村的特色农产品之一是
make: g++:命令未找到
Oracle 序列+触发器
ArcServer密码重置(账号不可以重置)
el-table 动态表头渲染 固定第一列 高度问题
[note] e-commerce order data analysis practice
Transformer le village de tiantou en un village de betteraves sucrières
kotlin位运算的坑(bytes[i] and 0xff 报错)
Freeswitch dial the extension number
69 cesium code datasource loading geojson
XAF Bo of dev XPO comparison
Some errors encountered in MySQL data migration
srpingboot security demo
FPGA - 7系列 FPGA内部结构之Clocking -01- 时钟架构概述
OpenGL es: (2) relationship between OpenGL es, EGL and glsl
JDBC database operation
golang panic recover自定义异常处理