NoSQL: Not only SQL
非关系型数据库,不是一种特定的技术,分类多种
而关系型数据库,就是一种特定的技术
大数据问题:BigData
并行数据库系统:关系型数据库,采用SQL,水平切分
NoSQL 数据库管理系统:非关系型,分布式,不支持ACID数据设计范式
简单数据模型
元数据和数据分离的模式
弱一致性
高吞吐量
高水平扩展能力,低端硬件集群
NewSQL数据库管理系统:
代表:Clustrix, GenieDB, ScaleBase,MinbusDB,Drizzle
云数据管理
大数据的分析处理:
MapReduce
CAP:分布式满足两者就很不错了
C:一致性(强)
因果一致性
读自写一致性
会话一致性
A: 可用性(随时都可以返回)
P:分区容错性
ACID:强一致性,隔离性,采用悲观保守方法,难以变化
BASE:弱一致性,可用性优先,采用乐观的方法,适应变化,更加单,更快
数据存储模型:
列式存储模型:看到跟关系型数据库样子一样,但是无法按行查(一般用于查某些字段有用)
文档存储:MongoDB
键值数据模型
图式数据模型(不是图片的意思)
列式模型:
应用场景:在分布式文件系统之上提供支持随机读写的分布式数据存储
典型产品:HBase、Hypertable、Cassandra
数据模型:以“列”为中心进行存储,将同一列数据存储在一起
优点:快速查询、高可扩展性、易于实现分布式扩展
文档模型:
应用场景:非强事务需求的web应用
典型产品:MongoDB、ElasticSearch、CouchDB、CouchBase Server
数据模型:键值模型,存储为文档
优点:数据模型无须事先定义
键值模型:
应用场景:内容缓存,用于大量并行数据访问高负载场景
典型产品:DynamoDB、Riak、Redis
数据模型:基于哈希表实现的key-value
优点:查询迅速
图式模型:
应用场景:社交网络、推荐系统、关系图谱
典型产品:Neo4j、Infinite Graph
数据模型:图式结构
优点:适应于图式计算场景
Mongod的常用选项:
fork={true|false}: mongod是否运行在后台
bind_ip=IP:指定监听的地址
port=PORT: 指定监听的端口
maxConns=: 并发最大连接数
MongoDB的复制功能:
两种类型:
master/slave
replica set: 复制集、副本集
服务于同一数据集的多个mongodb实例
主节点将数据修改操作保存至oplog中
arbiter: 仲裁者
工作特性:至少三个,且应该为奇数个节点;可以使用arbiter来参与选举;
heartbeat(2s), 自动失效转移(通过选举方式实现)
复制集的中特殊类型的节点:
0优先级的节点:冷备节点,不会被选举成为主节点,但可以参与选举;
被隐藏的从节点:首先是一个0优先级的从节点,且对客户端不可见;
延迟复制的从节点:首先是一个0优先级的从节点,且复制时间落后于主节点一个固定时长;
arbiter:
MongoDB的复制架构:
oplog:安装数据库后默认的数据量local 中存放
heartbeat
oplog: 大小固定的文件,存储在local数据库,幂等性,运行多少次,都是同一个结果
主节点才会写 oplog,同步给从节点,且是一个空间大小固定,所在文件系统的5%
一个从节点加入后需要:
初始同步(initial sync)
回滚后追赶(post-rollback catch-up)
切分块迁移(sharding chunk migrations)
local 数据库:
放了副本集的所有元数据和oplog;
用于存储oplog的是一个名为oplog.rs的collection;
oplog.rs的大小依赖于OS及文件系统,自动生成;
但可以自定义其大小oplogSize,
Mongo的数据同步类型:
初始同步:
节点没有任何数据时
节点丢失副本复制历史
复制
初始同步的步骤:
1、克隆所有数据库
2、应用数据集的所有改变:复制oplog并应用于本地
3、为所有collection构建索引
副本集的重新选举的影响条件:
心跳信息
优先级
optime
网络连接
网络分区
选举机制:
触发选举的事件:
新副本集初始化时
从节点联系不到主节点时
主节点“下台”时
主节点收到stepDown()命令时
某从节点有更高的优先级且已经满足成主节点其它所有条件
主节点无法联系到副本集的“多数方”
MongoDB的分片:
CPU
Memory
IO
MySQL分片需要借助: Gizzard, HiveDB, MySQL Proxy + HSACLE, Hibernate Shard, Pyshards
MongoDB:默认就支持分片
分片架构中的三种角色:
mongos: Router
将用户的强求路由到响应的分片上请求,可以认为是MongoDB的代理
config server: 元数据服务器,哪个结点,存放了那些数据,类似分布式
也需要多个,但是并不是副本集,所以需要第三方zookeper
shard: 数据节点,也称mongod实例(每个结点都要有副本集,以防挂了)
基于范围切片
range
基于列表切片
list
基于hash切片
hash
写离散,读集中