Mongdb 的功能定位
定位上,MongoDB 介于 Memcached 和关系型数据库之间,扩展性和性能上,MongoDB 更接近于 Memcached,功能上,MongoDB 更接近于关系型数据库。
Mongodb 的部署模型
-
三节点的复制集(Replica Set)
应用程序通过驱动,直接请求复制集中的主节点,完成读写操作。另外两个从节点,会自动和主节点同步,保持数据的更新。在集群运行的过程中,万一主节点遇到故障,两个从节点会在几秒的时间内选举出新的主节点,继续支持应用的读写操作。
-
分片集群(Shard Cluster)
当 MongoDB 被部署为一个分片集群时,应用程序通过驱动,访问路由节点,也就是 Mongos 节点 Mongos 节点会根据读写操作中的片键值,把读写操作分发的特定的分片执行,然后把分片的执行结果合并,返回给应用程序。那集群中的数据是如何分布的呢?这些元数据记录在 Config Server 中,这也是一个高可用的复制集。每个分片管理集群中整体数据的一部分,也是一个高可用复制集。此外,路由节点,也就是 Mongos 节点在生产环境通常部署多个。这样,整个分片集群没有任何单点故障。
Mongodb 基本概念和关系型数据库的对应关系
重点差异:
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 到指定位置读,也就是读性能提高)
- 对 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 中无此类型 | 最大键 |
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于