首页 > 数据库 >MongoDB数据库的基础特性

MongoDB数据库的基础特性

时间:2022-12-07 18:01:09浏览次数:37  
标签:HDFS MongoDB 数据库 支持 关系数据库 文档 特性

MongoDB是全球领先的NoSQL数据库,是一个可扩展、开源、表结构自由,用C++语言编写且面向文档的高性能分布式数据库。

 MongoDB在持续演进中,不断优化自己的特色功能,保证了数据库的稳定性,同时吸收其它数据库的优点并完善其功能。MongoDB成为了最像关系数据库的NoSQL数据库,在NoSQL领域处于绝对领先的地位。

 如下图所示:

    里程碑MongoDB v3.0版本,第一次将存储引擎层与Server层解耦,支持分布式插件式存储引擎架构,引入了WiredTiger存储引擎;版本v3.6开始支持单文档事务,大大提高了数据库的并发性能,同时可以通过“两阶段提交”模拟多文档事务;版本v4.0开始真正支持多文档事务;v4.2版本开始支持分片集群的事务,解决了分布式事务的难题。

    文档为MongoDB最小逻辑存储单元,由键值对构成,如下图所示:

 MongoDB的文档数据模型类似于JSON格式,通过这种嵌套的文档或数组可以减少关系数据库中大量的Join操作。

 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的NoSQL数据库;如下图所示,RDBMS里面table的概念对应MongoDB的collection,row的概念对应document;同时MongoDB支持的查询语言非常强大,其语法有点类似面向对象的查询语言,几乎可以实现类似关系数据里绝大部分的SQL功能。

    MongoDB的出现主要基于以下几点考虑:需要一种新的数据库技术来满足数据存储层的水平扩展,且要容易开发,能够存储海量的数据;一种非关系的结构是使数据库能支持水平扩展的最好方案;文档数据模型(bson)容易编码和管理,将内部相关的数据放在一起能够提高数据库的操作性能。

     MongoDB原生支持Map Reduce并行编程模式,支持管道式的聚集框架,为大数据的分析提供了强有力的保障。此外,为了进一步丰富MongoDB的技术生态,给开发者或运营人员更多的选择,官方还提供了与Spark的连接器,可与其它第三方数据分析工具完美结合;提供了MongoDB Charts工具,以图形化报表的形式分析数据并展示;提供了MongoDB Compass工具实现对集群数据库可视化的管理。

     通常大数据平台由内到外分为:存储层,资源管理层,计算层,程序接口层,如下图所示:

 从上图可以看出,MongoDB可以替换HDFS,作为大数据平台中最核心的部分,且相较于HDFS,MongoDB具备如下优势:

  1. 存储方式上,HDFS以文件为单位,每个文件64MB~128MB不等,而MongoDB作为文档数据库则表现得更加细颗粒化;
  2. MongoDB支持HDFS所没有的索引的概念,所以在读取上更加快;
  3. MongoDB支持的增删改功能比HDFS更加易于修改写入后的数据;
  4. HDFS的响应级别为分钟, 而MongoDB通常是毫秒级别;
  5. 如果数据库已经是MongoDB的话, 那就不用再转存一份到HDFS上了;
  6. 可以利用MongoDB强大的Aggregate做数据的筛选或预处理。

 当前,数据库市场最少有上百种数据库(不包含那些重新编译后换个壳的产品),MongoDB经过短短十年左右的时间就发展成最受欢迎的NoSQL数据库,不但能支持大部分传统关系数据库的应用场景,还能更好地支持未来大数据、人工智能等应用场景,相较于其它数据库,MongoDB具有以下几个关键特性:

  1. 嵌套文档模型

 典型结构如下:

{

 "_id" : ObjectId("51e0c391820fdb628ad4635a"),

 "author" : { "name" : "Jordan","email" : "[email protected]" },

 "postcontent" : "jordan is the god of basketball",

 "comments" : [

 {"user" : "xiaoming", “text" : "great player"},

 { "user" : "xiaoliang", "text" : "nice action" }

]

}

 用与以JSON格式类似的键值对来存储(在MongoDB中叫BSON对象),其中“值”的数据类型有常见的字符串、数字、日期、还可以是BSON对象、数组以及数组的元素也可以是BSON对象,通过这种嵌套的方式,使MongoDB的数据类型变得相当丰富。

  1. 模式自由

 MongoDB与传统关系数据库还有一个重大区别就是可扩展的表结构。也就是说collection(表)中的document(一行记录)所拥有的字段(列)是可以变化的,如下文档对象document(一行记录)比上面列出的文档对象document(一行记录)多一个time字段,但他们可以共存在同一个collection(表)中。

 {

 "_id" : ObjectId("51e0c391820fdb628ad4635a"),

 "author" : { "name" : "Jordan","email" : "[email protected]" },

 "postcontent" : "jordan is the god of basketball",

 "comments" : [

 {"user" : "xiaoming", “text" : "great player"},

 { "user" : "xiaoliang", "text" : "nice action" }

 ],

 “time”: “2013-07-13”

 }

 MongoDB查询语句不是按照SQL的标准来开发的,它是围绕JSON这种特殊格式的文档型存储模型开发了自己一套的查询体系,这就是现在非常流行的NoSQL体系。在关系数据库中常用的SQL语句在MongoDB中都有对应的解决方案。

 我们知道传统关系数据库中JOIN操作可能会产生笛卡尔积的虚拟表,消耗较多系统资源,而MongoDB的文档对象集合collection可以是任何结构,可以通过设计较好的数据模型尽量避开这样的操作需求,如果真的需要从多个collection(表)中检索数据,那可以通过做多次查询得到。

  1. 自带强大的计算框架

 在关系数据库中经常用到的group by等分组聚集函数,在MongoDB中也有,而且MongoDB提供了更加强大的Map Reduce方案,同时MongoDB官方还提供了与Spark的连接器,为海量数据的统计、分析提供了便利。

  1. 复制集保证数据高可靠性

 MongoDB支持复制集(replset),一个复制集在生产环境中最少需要3台独立的机器(测试的时候为了方便可能都部署在一台机器上),一台做主节点(primary),一台做次节点(secondary),一台做仲裁节点(只负责选出主节点),备份,自动故障转移,这些特性都是复制集支持的。

  1. 分片集群实现高可扩展性

 MongoDB支持自动分片sharding,分片的功能实现海量数据的分布式存储,分片通常与复制集配合起来使用,实现读写分离、负载均衡,当然如何选择片键?是实现分片功能的关键,后面章节会详细分析。

  1. 多文档事务的支持

 多文档事务特性从v4.0版本开始支持复制集部署模式,v4.2版本更加完善,并开始支持分片集群部署模式。这个关键特性促使MongoDB具备像关系数据库那样的高并发能力,能够支持对ACID要求比较高的应用场景,完全可以替代关系数据库,在生产环境中全面部署MongoDB。

标签:HDFS,MongoDB,数据库,支持,关系数据库,文档,特性
From: https://www.cnblogs.com/xieqisheng666/p/16963851.html

相关文章

  • 25万全国地形数据库说明(转)
    转自:https://www.cnblogs.com/xiexiaokui/archive/2006/11/18/564649.html总况1、数据库构成全国1:25万数据库,是国家基础地理信息系统三个全国性空间数据库之一。它由......
  • 针对数据库逻辑删除操作简单实现方案
    数据库逻辑删除定义逻辑删除是指在删除数据库的某条记录时,并不是真正的将该条记录删除,而是通过某个字段来标识其状态为“删除”,在接下来的查询等操作时,根据此字段来过滤......
  • 【mysql】误删除了自带的mysql数据库后该怎么恢复?
    前言如果mysql数据库系统自带的mysql数据库被误删了,应该如何恢复?其实操作方法比较简答,今天用实验的方式分享一下1、实验环境信息实验环境信息:mysql版本5.7......
  • fastapi websocket mongodb swagger-ui离线
    E:\song\agv_fastapi_socket_v3\app.pyimportjson#fastapifromfastapiimportFastAPI,WebSocket,Request,WebSocketDisconnectfromfastapi.responsesimportR......
  • Webpack中的高级特性
    自从webpack4以后,官方帮我们集成了很多特性,比如在生产模式下代码压缩自动开启等,这篇文章我们一起来探讨一下webpack给我们提供的高级特性助力开发。探索webpack的高级特性......
  • React高级特性之Context
    Context提供了一种不需要手动地通过props来层层传递的方式来传递数据。正文在典型的React应用中,数据是通过props,自上而下地传递给子组件的。但是对于被大量组件使用的......
  • USB总线-RK3399 USB3.0控制器特性介绍(二)
    1.RK3399USB下图是RK3399SOC的框图。RK3399包含了2个USB2.0Host控制器;两个USB3.0OTG控制器,同时兼容USB2.0。USB3.0使用的是Synopsys公司的IP,驱动也使用Synopsys的dwc3......
  • EasyExcel实现批量导入数据库
    场景说明Java实现Excel批量导入数据库这个是之前已经实现的方式,细节点可以看之前的文章,主要是把之前使用POI的Workbook,替换为EasyExcel,提升性能代码1、继承Anal......
  • 解决QT 中Sqlite数据库添加加密功能
    解决QT 中Sqlite数据库添加加密功能是本文要介绍的内容,Sqlite数据库默认没有加密功能,对一些需要对工程文件进行保密的场合产生了不便,本文以QT4.4.3为例,对QT 源代码中......
  • 二. 数据库的安装(Ubuntu系统)
    1.shell脚本需要用sourceinstall_mysql_8026.sh点击查看代码#!/bin/bashDir=/usr/local/srcfunctionAddGroup(){ group=mysql egrep"^$group"/etc/group if......