Database(一) 数据库全览
一:数据库的全览图
1. 数据库全览图二:数据库的种类
DataBase是存储数据的一个媒介,自发展以来,已经有太多针对于不同场景的DataBase,比如几年前,刚开始接触Mysql的时候,发现Mysql常用的两种存储引擎,就很好奇,觉得MyIsam比Innodb差远了,为什么还有存在的价值,后来明白原来是场景不同,一个偏向OLTP、一个偏向OLAP;下面就从场景的角度,对我接触过的DataBase分类:
1.关系型数据库 RDB
关系型数据库一般都有固定的表结构,且有一定的范式的理论支撑,对数据的格式和结构要求较多,常见的有 SQL Server、Oracle、Mysql、PostgreSQL;RDB的优点在于有完善的DDL、指出复杂的SQL,一致性上保证比较好;缺点在于扩展性、灵活性较差;
2.NoSQL Not only SQL
NoSQL某种意义上是在互联网场景下发展起来的,一般都不使用关系型数据库的设计,他们往往牺牲了数据的强一致性,他们往往用来弥补或替换RDB的一些不试用的场景,比如Redis是为了弥补单机RDB的请求量限制,MongoDB来解决数据需要严格设计的弱点,Cassandra使用列存储,也可以支持一些半结构化数据;
NoSQL的场景也比较多,有做Key-value:比如Redis、Memcached,常作为缓存使用;有文档存储型,比如MongoDB,还有列存储的Cassandra、HBase等;
3. New SQL
1)New SQL解决的问题
NoSQL主要是弥补和替换RDB的一些场景的,比如解决存储非结构化数据,但是还是替代不了RDB;而RDB在单机上是有限制的,为了保留RDB的特点,且增强DB的扩展性,提出了New SQL,常见的有 TiDB、Mysql Cluster;(PS :也有一些数据库中间件来解决类似的问题,比如Sharding-Sphere,Sharding-JDBC是它的一部分) 总体来讲:NewSQL即保持NoSQL的高可扩展和高性能,并且保持关系模型;
2)NewSQL的结构设计的重点
容灾和高可用性:多副本;
SQL引擎优化:会提供SQL的解析、Sharding、转发的功能,增删改查应该都需要跨节点
一致性:分布式的一致性,比如2PC、Paxos、Raft等一致性协议
高扩展性:可以水平扩展,比如有中心控制或数据迁移等
4.OLAP、OLTP
即Online Analytical processing 和Online transaction processing,他们之间的区别有点类似于 计算密集型和IO密集型的区别,OLTP一般的瓶颈在IO,SQL语句也偏向于短小;OLAP一般的瓶颈在CPU;
比如MyIsam比较适用于OLAP,表锁、存储、不支持事务等;
三:准备总结的内容
1.mysql相关
1)使用方面:explain
2)语句的原理:join、group by、in查询
3)存储相关
4)索引相关
5)事务相关
6)锁、死锁等
2.扩展
1)分库分表:Sharding-JDBC、mysql Cluster
2)NoSQL:Cassandra,简单介绍下MongoDB
3)TiDB