前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB:基础概述

MongoDB:基础概述

作者头像
栗筝i
发布2023-01-01 10:26:54
9600
发布2023-01-01 10:26:54
举报
文章被收录于专栏:迁移内容迁移内容

MongoDB 是一个开源的、跨平台的、面向文档的、基于分布式文件存储的数据库系统,MongoDB 是由 C++ 语言开发,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。 本篇内容主要包括:MongoDB 概述、MongoDB 的体系结构、关于 BSON


文章目录


一、MongoDB 概述

1、MongoDB 简介

MongoDB 是一个开源的、跨平台的、面向文档的、基于分布式文件存储的数据库系统,MongoDB 是由 C++ 语言开发,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。

image-20221227110258492
image-20221227110258492

MongoDB 常常被归类为 NoSQL 数据库系统,也是当前 NoSQL 数据库中比较热门的一种。

2、文档数据库

MongoDB 文档类似于 Json 对象。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。字段值可以包含其他文档,数组及文档数组。

image-20221231020715120
image-20221231020715120

使用文档的优点是:

  • 文档(即对象)对应于许多编程语言中的内置数据类型。
  • 嵌入式文档和数组减少了对昂贵连接的需求。
  • 动态模式支持流畅的多态性。

Ps:MongoDB 将文档存储在集合中。集合类似于关系数据库中的表。

3、MongoDB 特点

MongoDB 作为非关系性文档数据库有着以下几个主要特点:

  1. 高性能:MongoDB 提供了高性能的数据持久化方式,包括了对嵌入式数据模型的支持(减少了数据库系统上的 I/O 操作)。对更多的索引类型的支持(更快的查询),并且可以包含来自嵌入式文档和数组的键;
  2. 高可用:MongoDB 的复制工具(称为副本集)提供:自动故障转移、数据冗余。副本集是一组维护相同数据集合的 MongoDB 实例,提供了冗余和提高了数据可用性;
  3. 水平拓展:MongoDB 提供水平可伸缩性作为其核心功能的一部分:分片将数据分布在一个集群的机器上。从 3.4 开始,MongoDB 支持基于分片键创建数据区域。在平衡群集中,MongoDB 仅将区域覆盖的读写定向到区域内的那些分片;
  4. 丰富的查询语言:MongoDB 支持丰富的查询语言以支持读写操作(CRUD)以及:数据聚合、文本搜索和地理空间查询;
  5. 支持多种存储引擎:MongoDB支持多个存储引擎:WiredTiger 存储引擎(包括对静态加密的支持 )、内存存储引擎。 另外,MongoDB 提供可插拔的存储引擎 API,允许第三方为 MongoDB 开发存储引擎。

二、MongoDB 的体系结构

1、MongoDB 数据逻辑结构

MongoDB的一个实例,由多个数据库(Database)组成;一个数据库,由多个集合(Collection)组成;一个集合,又由多个文档(Document)组成!

image-20221229154907821
image-20221229154907821

以关系型数据库为对比对象,来讲一下上面这些概念的意思:

  • 实例:MongoDB 实例和关系型数据库实例是一样的,由各种高速缓冲池以及后台进程组成,负责维护和访问数据库数据;
  • 数据库(Database):MongoDB 的数据库和关系型数据库也是差不多的概念,一个 MongoDB 实例可以承载多个数据库。不过需要注意的是:
    • 不同的数据库拥有独立的权限,即使在磁盘上,不同数据库也放在不同的文件中;
    • MongoDB 中有三个特殊的数据库:admin(可以看做“root”数据库)、local(本地数据库,永远都不可以复制,且一台服务器上的所有本地集合都可以放在这个数据库中)、config(用于分片设置,保存分片信息);
  • 集合(Collection):集合可以看做是关系型数据库中的表,不同的是关系型数据库中的表存放的是表数据,但 Collection 存放的是文档。需要注意的是:集合是“动态模式”的,对于文档的格式没有要求,所以十分自由。
  • 文档(Document):MongoDB 是一种面向文档的数据库,文档也是 MongoDB 中数据的基本单元,可以类比看作关系型数据库中的一行数据。
2、与关系型数据库的术语类比

MongoDB

关系型数据库

Database

Database

Collection

Table

Document

Record/Row

Filed

Column

Embedded Documents

Table join

3、MongoDB 数据存储结构

MongoDB的默认数据目录是 /data/db,它负责存储所有的 MongoDB 的数据文件。在 MongoDB 内部,每个数据库包含一个 *.ns 文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。

MongoDB 内部有预分配空间的机制,每个预分配的文件都用 0 进行填充,由于有了这个机制,MongoDB 始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。

数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间。这些命名空间的元数据都集中在在 *.ns 文件中。


三、关于 BSON

1、Bson 概念

MongoDB 作为一款流动的文档数据库,采用 Bson 格式来支持文档模型。

Bson是 由 10gen 开发的一个数据格式,目前主要用于 MongoDB 中,是 MongoDB 的数据存储格式。Bson 基于 Json 格式,选择 Json 进行改造的原因主要是 Json 的通用性及 Json 的 schemaless 的特性。

Bson 全称是 Binary Json,和 Json 很像,但是是采用二次格式进入存储,它和 Json 一样,支持内嵌的文档对象和数组对象,但是 Bson 有 Json 没有的一些数据类型,如 Date 和 BinData 类型。

# 一个 Document 的 Bson 表示

代码语言:javascript
复制
{
    title:"MongoDB",
    last_editor:"192.168.1.122",
    last_modified:new Date("27/06/2011"),
    body:"MongoDB introduction",
    categories:["Database","NoSQL","Bson"],
    revieved:false
}

# 一个嵌套的例子:

代码语言:javascript
复制
{
    name:"lemo",
    age:"12",
    address:{
        city:"suzhou",
        country:"china",
        code:215000
    } ,
    scores:[
        {"name":"english","grade:3.0},
        {"name":"chinese","grade:2.0}
    ]
}
2、Bson 与 Json 的区别

Bson 相对 Json 有以下优势:

  1. 更快的遍历速度:对 Json 格式来说,太大的 Json 结构会导致数据遍历非常慢。在 Json 中,要跳过一个文档进行数据读取,需要对此文档进行扫描才行,需要进行麻烦的数据结构匹配,比如括号的匹配。而 Bson 对 Json 的一大改进就是,它会将 Json 的每一个元素的长度存在元素的头部,这样你只需要读取到元素长度就能直接 seek 到指定的点上进行读取了。
  2. 操作更简易:对 Json 来说,数据存储是无类型的,比如你要修改基本一个值,从 9 到 10,由于从一个字符变成了两个,所以可能其后面的所有内容都需要往后移一位才可以。而使用 Bson,你可以指定这个列为数字列,那么无论数字从 9 长到 10 还是 100,我们都只是在存储数字的那一位上进行修改,不会导致数据总长变大。当然,在 MongoDB 中,如果数字从整形增大到长整型,还是会导致数据总长变大的。
  3. 增加了额外的数据类型:Json 是一个很方便的数据交换格式,但是其类型比较有限。Bson在其基础上增加了 “byte array” 数据类型。这使得二进制的存储不再需要先 base64 转换后再存成Json,大大减少了计算开销和数据大小。当然,在有的时候,Bson 相对 Json 来说也并没有空间上的优势,比如对 {“field”:7},在 Json 的存储上 7 只使用了一个字节,而如果用 Bson,那就是至少 4 个字节(32位)

目前在 10gen 的努力下,BSO N已经有了针对多种语言的编码解码包。并且都是 Apache 2 license 下开源的。并且还在随着 MongoDB 进一步地发展。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、MongoDB 概述
    • 1、MongoDB 简介
      • 2、文档数据库
        • 3、MongoDB 特点
        • 二、MongoDB 的体系结构
          • 1、MongoDB 数据逻辑结构
            • 2、与关系型数据库的术语类比
              • 3、MongoDB 数据存储结构
              • 三、关于 BSON
                • 1、Bson 概念
                  • 2、Bson 与 Json 的区别
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档