主要解决什么是NoSQL,为什么要有NoSQL,和NoSQL的使用场景等问题
数据库拓展方法:
1、memcached缓存
2、mysql主从复制,读写分离
3、mysql分库分表,水平拆分,mysql集群
MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL最好使用InnoDB引擎
4、MySQL不适合存放大的数据
网站布局
用户请求->Nginx负载均衡->服务器->Mysql集群->文件、图片服务器,流媒体服务器,Hadoop集群等
RDBMS:
- 高度组织化、结构化的数据
- 结构化查询语言(SQL)
- 数据和关系都存储在单独的表中
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
- 事务特性:ACID(原子性、一致性、独立性、持久性)
NoSQL:
1、非关系型数据库,去掉关系数据库的关系型特征,容易扩展。在架构层面带来了可扩展的能力
2、数据库结构简单,具有非常高的读写性能
- 不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
- 键值对存储,列存储,文档存储,图形数据库
- 最终一致性,而不是ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用和高伸缩性
NoSQL四种类型:
- KV键值
- Redis
- 内容缓存,处理大量数据的高访问负载
- key-value的键值对,哈希表实现
- 文档型数据库(bson格式比较多)
- MongoDB
- 表结构可变
- key-value对应的键值对,value是结构化的数据
- 列存储数据库
- Hadoop
- 分布式文件系统
- 列簇式存储,查找速度快,可扩展性强
- 图关系数据库
- Neo4j,InfoGrid
- 社交网络等的存储
- 图结构(最短路径寻址等,N度关系查找)
NoSQL中的CAP和Base:
- CAP
- Consistency(强一致性)
- Availability(可用性)
- Partition tolerance(分区容忍性)
分布式存储系统中的CAP只能三选二
CA:RDBMS
CP:MongoDB、HBase、Redis
AP:CouchDB、Cassandra、DynamoDB、Riak
-
BASE:通过让系统放松对某一时刻数据一致性的要求,来换取系统整体伸缩性和性能的改观
- 基本可用(Basically Avaliable)
- 软状态(Soft state)
- 最终一致性(Eventually consistent)
分布式
在不同的多台服务器上,部署不同的服务模块,他们之间通过Rpc/Rmi通信和调用,对外提供服务和组内协作
集群
不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问