Mongodb 的相关概念

本贴最后更新于 285 天前,其中的信息可能已经沧海桑田

Mongdb 的功能定位

image

定位上,MongoDB 介于 Memcached 和关系型数据库之间,扩展性和性能上,MongoDB 更接近于 Memcached,功能上,MongoDB 更接近于关系型数据库。

Mongodb 的部署模型

image

  1. 三节点的复制集(Replica Set)

    应用程序通过驱动,直接请求复制集中的主节点,完成读写操作。另外两个从节点,会自动和主节点同步,保持数据的更新。在集群运行的过程中,万一主节点遇到故障,两个从节点会在几秒的时间内选举出新的主节点,继续支持应用的读写操作。

  2. 分片集群(Shard Cluster)

    当 MongoDB 被部署为一个分片集群时,应用程序通过驱动,访问路由节点,也就是 Mongos 节点 Mongos 节点会根据读写操作中的片键值,把读写操作分发的特定的分片执行,然后把分片的执行结果合并,返回给应用程序。那集群中的数据是如何分布的呢?这些元数据记录在 Config Server 中,这也是一个高可用的复制集。每个分片管理集群中整体数据的一部分,也是一个高可用复制集。此外,路由节点,也就是 Mongos 节点在生产环境通常部署多个。这样,整个分片集群没有任何单点故障。

Mongodb 基本概念和关系型数据库的对应关系

image

重点差异:

Table(表) 《==》Collection(集合)

Parent-Child Tables (主表和子表)《==》Nested Sub-Document or Array(内嵌子文档或内嵌数组)

Row(行)《==》Document(文档)

Column(列)《==》Fieid(变量)

Join(关联)《==》Embedding Linking Slookup(内嵌)

Mongodb 的数据层次结构

-- 数据库

-- 集合

	-- 文档

Mongodb 的数据结构

MongoDB 采用 JSON 文档结构:
·JSON 的全称:JavaScript Object Notation
·JSON 的格式:支持如下数据格式
·字符串(string) :e.g., “Thomas”
·数字(decimal) :e.g., 29, 3.7)
·布尔(boolean):True / false
·空值(null):Null
·数组(array):e.g., [88.5, 91.3, 67.1]
·对象(json):Object

Mogondb 采用 BSON(Binary JSON 二进制 JSON)格式保存数据

关于 JSON 和 BSON 的区别:Json 刚明白,怎么又出来个 Bson?

关于 BSON 的所有数据类型的详解可参考:MongoDB 基础之 BSON 数据类型 (关键的数据类型有黄色标注)

重点:1. BSON 对 JSON 的一大改进就是,它会将 JSON 的每一个元素的长度存在元素的头部。(思考为什么要这么改?可以根据长度 seek 到指定位置读,也就是读性能提高)

  1. 对 JSON 来说,数据存储是无类型的,可以理解为一个字符串,修改其中的数字 9 改为 10,那么就从一个字符变成 2 个字符,其后面的所有内容都需要往后移一位。一个 BSON 可以指定一个列进行修改(数据类型确定,长度确定),而不导致总长度变大(注意如果被改的数据从 int 变成 long 还是会导致总长度变化的)。明显,写性能提高了!
类型 整数 别名 备注 说明
Double 1 double shell 中的数字类型 64 位浮点数
String 2 string 字符串类型
Object 3 object 对象类型
Array 4 array 数组类型
Binary data 5 binData shell 中不可用 二进制数据类型
Undefined 6 undefined 已过时 未定义类型
ObjectId 7 objectId 对象 id 类型
Boolean 8 bool 布尔类型
Date 9 date 日期类型
Null 10 null 用于表示空值或者不存在的字段
Regular Expression 11 regex 正则表达式类型
DBPointer 12 dbPointer 已过时
JavaScript 13 javascript JavaScript 代码
Symbol 14 symbol shell 中不可用,已过时
JavaScript(with scope) 15 javascriptWithScope 带作用域的 JavaScript 代码
32-bit integer 16 int shell 中不可用 32 位整数
Timestamp 17 timestamp 时间戳类型
64-bit integer 18 long shell 中不可用 64 位整数
Decimal128 19 decimal 3.4 版本新增
Min key -1 minKey shell 中无此类型 最小键
Max key 127 maxKey shell 中无此类型 最大键
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...