1.什么是候选择mongoodb? 什么是候不用?
2.orm
3.分片、存储、恢复
-----------------
mongodb是什么?
not only sql
在key,value的基础上,加上结构化的约束。
mongodb是一个最像关系型数据库的非关系型数据库。
关系型数据库:
事务
表关联
表结构约束
非关系型数据库:
无事务,性能会大大提高。
数据与数据之间没有关联,都是独立的。
key-value,无结构约束。 为什么说像呢? 因为和关系型数据库非常类似。
Database Database 数据库
Table Collection 数据库表/集合
Row Document 数据记录行
Column Field 字段
Index Index 索引
Table Joins 无
PrimaryKey Object ID 主键
-----------mysql举例
Member(mysql)
id name addr age
主键自增 非空,字符串 允许空,字符串 非空,数字
-----------mongodb举例
Member 不会预定义,增量分析
_id: ObjectID
name: "Tom"
add: "湖南长沙"
_id: ObjectID
name: "Mic"
add: "湖南衡阳"
age: 18
_id: ObjectID
name: "Mic"
add: "湖南衡阳"
age: 18
sex: "男"
所有字段中最大的‘并集’,只要出现一次,就会存在。
Mongodb中的表,字段,不需要预定义。
bson,也就是二进制的json
-----------
cap:
c: 一致性
a:可用性
p:分区容错性
ca:
cp:
ap:
mongodb默认:AP, 因此是最终一致性。
---------
Null: 空值 表示空值或者未定义的对象 {"x": null}
Boolean: 布尔值 真或者假 {"x": true}
Integer: 整数 整形数值,用于存储数值. 根据你所采用
的服务器,可以分为32位或64位。
Double:浮点数 双精度浮点。 {"x": 3.14, "y": 3}
String: 字符串 utf8字符串
Symbol: 符号 基本上等于字符串类型。但是采用的是特殊符号类型语言。
ObjectID: 对象ID 对象ID,用于创建文档的ID。 {"id": ObjectId()}
Date: 日期 日期时间,用unix时间格式来存储当前日期或时间。 {"date"L new Date()}
Timestamp: 时间戳 从标准纪元开始的毫秒数。
Regular: 正则表达式 文档中可以包含正则表达式,遵循js语法。 {"foo": /foobar/i}
Code: 代码 可以包含js代码 {“x": function(){}}
Undefined: 未定义 已经废弃
Array: 数组 值得集合或者列表 {"arr": ["a", "b"]}
Binary Data: 二进制 用于存储二进制数据
Object:内嵌文档 文档可以作为文档中某个 {"x": {"foo": "bar"}}
---------底层原理
Route Server: 路由服务--》Config Server:配置服务(根据配置分配到哪台机器)--》Mongod副本集(存在N台机器上)
仲裁节点: 副本与副本之间的心跳。 主机出问题后,切换到副本。
从机是只同步。 仲裁只找老大。
分片(数据可以存储各个节点之上):
类似于hdfs里面的MapReduce:Map是分发,Reduce是归纳。
去热点: 数据存储要均衡。
分布式存储,易扩展,并保证均衡。
块:就是hash槽。 有一定冗余,保证高可用。
----------应用场景
实时数据插入,更新,查询,适合数据的缓存。
数据会同步到内存,索引会动态生成。索引会存内存。
大尺寸,低价值的存储: 如网盘,电影。
用户信息,这种常用的。
适合数据集群。
--------不适合的场景
银行,会计等大量原子性复杂事务的应用程序。
一个地方报错,另外一个地方不影响。
智能商业应用等高度BI使用规则。
复杂的sql查询才能算出来的。