问题
MongoDB如何组织数据?
MongoDB支持哪些数据类型?
什么情况下该范式化数据,什么情况下该反范式化;
如何规划数据模型;
固定集合(capped collection)是如何工作的;
什么情况下该使用索引,分片和复制;
如何确定数据的生命周期;
NoSQL的一个缺点是, 大多数解决方案在ACID(原子性、一致性、隔离性和持久性)方面都无法与广泛接受的RDBMS系统媲美
理解MongoDB
- 在MongoDB中,数据对象被存储为集合中的文档,而不是传统关系型数据库的行和列。文档是以二进制JSON(BSON)对象的方式存储的;
- MongoDB因为速度快、可扩展性强、易于实现,为需要存储用户评论、博客和其他内容的网站提供了极佳的后端存储解决方案
MongoDB 成为最受欢迎NoSQL数据库的其他一些原因:
- 面向文档, 数据在数据库中格式与服务器端和前端的格式非常接近, 避免了将数据的行与对象的间的转换;
- 高性能;
- 高可用性;
- 高可扩展性;
- 对SQL注入攻击免疫;
MongoDB 中_ID(ObjectID)。 是独一无二的ID, 这种ID由下列几部分组成:
- 从新纪元开始的秒数(4字节)
- 3字节的机器标识符
- 2字节的进程ID
- 3字节的计数器(该计数据的起始值是随机的)
MongoDB文档最大不能超过16M, 就是避免占用太多的RAM
MongoDB数据类型及其ID号
类型 | ID编号 |
---|---|
Double(双精度浮点数) | 1 |
String(字符串) | 2 |
Object(对象) | 3 |
Array(数组) | 4 |
Binary Data(二进制数据) | 5 |
ObjectID(对象ID) | 7 |
Boolean(布尔值) | 8 |
Date(日期) | 9 |
Null(空) | 10 |
Regular Expression(正则表达式) | 11 |
JavaScript | 13 |
Symbol(符号) | 14 |
JavaScript(带作用域) | 15 |
32-bit integer(32位整数) | 16 |
Timestamp(时间戳) | 17 |
64-bit integer(64位整数) | 18 |
Min key | 255 |
Max key | 127 |
暂不清楚这种ID分配其目的是什么?
使用MongoDB支持的各种数据类型时, 需要注意的另一点是它们的排序sort,比较不同BSON类型的值时,MongoDB使用下面的排序sort;
编号 | 类型 |
---|---|
1 | Min Key(内部使用的类型) |
2 | Null |
3 | 数字(32位整数、64位整数和双精度浮点数) |
4 | 符号和字符串 |
5 | 对象 |
6 | 数组 |
7 | 二进制数据 |
8 | 对象ID |
9 | 布尔值 |
10 | 日期和时间戳 |
11 | regular expression 正则表达式 |
12 | Max key 内部使用的类型 |
什么时数据范式化
- 是指通过组织文档和集合以最大限度地减少冗余和依赖;
- 使用嵌入式文档对数据进行反范式化;
主对象和子对象之间为一对一关系或者子对象很少且不会频繁更新;