数据库不只是 Mysql,你须要晓得这些能力拿到 offer
有大半年的工夫没有跟新微信公众号了。
上半年疫情的影响,过年之后始终在家办公。直到快 4 月才开始去公司办公。疫情期间在线教育疾速倒退,7- 9 月教育行业暑期大战,继续忙了 3 个多月,因而也把公众号丢了下来。很快慰的看到参加的我的项目疾速倒退,缓缓走向正规。本人也逐步把公众号捡了起来。
明天想跟大家聊一聊,数据库相干的话题。
数据库全景图
提到数据库,大多数人脑海中浮现都是 mysql,sqlserver,oracle。其实,数据库不只是这些。它还包含例如 MongoDB,Cassandra,Es 等其余的存储模式。
那么,常见的数据库有哪些?并且怎么分类这些数据,以及该怎么在不同场景下抉择不同数据库呢?
首先,放一张 ”451Group” 剖析报告中的数据库的全景图
从图中,能够看出,数据库行业保罗万象。包含了很多不同分类的产品。
数据库分类
数据库总的来看能够分为三类:
- 关系型数据库:例如 mysql,sqlserver,oracle 等
- NoSql(非关系型数据库): 例如 Redis,MongoDB,HBase 等
- NewSql:是对各种新的可扩大 / 高性能数据库的简称,这类数据库不仅具备 NoSQL 对海量数据的存储管理能力,还放弃了传统数据库反对 ACID 和 SQL 等个性。包含例如:lustrix、GenieDB、ScalArc、Schooner 等。
上面别离介绍这三种类型的数据库。
传统的关系型数据库
首先给出关系型数据库一个官网定义:
关系型数据库:指采纳了关系模型来组织数据的数据库。关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的分割所组成的一个数据组织。
关系型数据库的长处:
1. 容易了解:二维表构造是十分贴近逻辑世界的一个概念,关系模型绝对网状、档次等其余模型来说更容易了解
2. 使用方便:通用的 SQL 语言使得操作关系型数据库十分不便
3. 易于保护:丰盛的完整性 (实体完整性、参照完整性和用户定义的完整性) 大大减低了数据冗余和数据不统一的概率
关系型数据库存在的问题:
- 高并发反对不够:网站的用户并发性十分高,往往达到每秒上万次读写申请,对于传统关系型数据库来说,硬盘 I / O 是一个很大的瓶颈。
- 海量数据的挑战:网站每天产生的数据量是微小的,对于关系型数据库来说,在一张蕴含海量数据的表中查问,效率是非常低的
- 横向扩大艰难:在基于 web 的构造当中,数据库是最难进行横向扩大的,当一个利用零碎的用户量和访问量一劳永逸的时候,数据库却没有方法像 web server 和 app server 那样简略的通过增加更多的硬件和服务节点来扩大性能和负载能力。当须要对数据库系统进行降级和扩大时,往往须要停机保护和数据迁徙。
- 性能欠佳:在关系型数据库中,导致性能欠佳的最次要起因是多表的关联查问,以及简单的数据分析类型的简单 SQL 报表查问。为了保障数据库的 ACID 个性,必须尽量依照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。
数据库事务必须具备 ACID 个性,ACID 别离代表 Atomic(原子性),Consistency(一致性),
Isolation(隔离性),Durability(持久性)。
当今十大支流的关系型数据库
Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,
Microsoft Access,SQLite,Teradata,MariaDB(MySQL 的一个分支),SAP。
NoSQL
针对传统关系型数据库的毛病,为了更好的适应古代互联网高并发,高性能,高可用以及海量数据的挑战的须要,呈现了不同的 NoSQL 数据库。
NoSQL 放弃了传统 SQL 的强事务保障和关系模型,重点放在数据库的高可用性和可扩展性。
NoSQL 的次要劣势:
- 高可用性和可扩展性,主动分区,轻松扩大
- 不保障强一致性,性能大幅晋升
- 没有关系模型的限度,极其灵便
NoSQL 次要的劣势:
- 不保障强一致性:对于一般利用没问题,但还是有不少像金融一样的企业级利用有强一致性的需要。
- NoSQL 不反对 SQL 语句:兼容性是个大问题,不同的 NoSQL 数据库都有本人的 api 操作数据,学习起来比拟繁琐。
NoSQL 数据库的分类
1. key-value 存储
以 key-value 对的模式存储数据。value 能够是自定义的不必的数据结构。这个类型的数据库次要包含:
数据库 | 分类 | 特点 |
---|---|---|
Redis | Key-value store,Document store,Graph DBMS,Search engine,Time Series DBMS | |
Amazon DynamoDB | Document Store,Key-value store | |
Couchbase | Document Store,Key-value store | |
etcd | Key-value store | |
Memcached | Key-value store | |
Ehcache | Key-value store | |
LevelDB | Key-value store |
2. 文档存储
以比拟自在的格局(通常为 JSON)的形式存储文档内容。这意味着:
- 记录不须要具备对立的构造,即不同的记录能够具备不同的列。
- 每个记录的各个列的值类型能够不同。
- 列能够具备多个值(数组)。
- 记录能够具备嵌套构造。
常见的文档存储有:MongoDB,Amazon DynamoDB,Couchbase,CouchDB。
3. 宽列存储
宽列存储(也称为可扩大记录存储)将数据存储在记录中,并且可能包容大量动静列。因为列名和记录键不是固定的,并且一条记录能够蕴含数十亿列,因而宽列存储能够看作是二维键值存储。
宽列存储与文档存储共享无模式的个性,然而实现却大不相同。
在某些关系零碎中,不能将宽列存储与面向列存储相混同。这是一个外部概念,用于进步 RDBMS 针对 OLAP 工作负载的性能,并存储表中的数据,而不是逐条记录,而是逐列存储。
列存储应用场景:
行式存储对于 OLTP 场景是很天然的:大多数操作都以实体(entity)为单位,即大多为增删改查一整行记录,显然把一行数据存在物理上相邻的地位是个很好的抉择。
然而,对于 OLAP 场景,一个典型的查问须要遍历整个表,进行分组、排序、聚合等操作,这样一来按行存储的劣势就不复存在了。更蹩脚的是,剖析型 SQL 经常不会用到所有的列,而仅仅对其中某些感兴趣的列做运算,那一行中那些无关的列也不得不参加扫描。
列式存储就是为这样的需要设计的。如下图所示,同一列的数据被一个接一个紧挨着寄存在一起,表的每列形成一个长数组。
常见的宽列存储数据包含:Cassandra 和 HBase。
4. 图存储
图 DBMS,也称为面向图的 DBMS 或图数据库,将图构造中的数据表示为节点和边,即节点之间的关系。它们容许轻松解决该模式的数据,并且能够简略地计算图形的特定属性,例如从一个节点到另一个节点所需的步骤数。
图形 DBMS 通常不会在所有节点上提供索引,在这种状况下,无奈基于属性值间接拜访节点。
常见的图存储包含:Neo4j,Microsoft Azure Cosmos DB。
NewSQL
NewSQL 提供了与 NoSQL 雷同的可扩展性,而且仍基于关系模型,还保留了极其成熟的 SQL 作为查询语言,保障了 ACID 事务个性。简略来讲,NewSQL 就是在传统关系型数据库上集成了 NoSQL 弱小的可扩展性。
NewSQL 的次要个性:
- SQL 反对,反对简单查问和大数据分析。
- 反对 ACID 事务,反对隔离级别。
- 弹性伸缩,扩容缩容对于业务层齐全通明。
- 高可用,主动容灾。
支流 NewSQL 包含:TiDB,VoltDB,ClustrixDB 等。
下面介绍了三种类型数据库(关系型数据库,NoSQL,NewSQL),处了这些分类之外还有针对特定场景存储的选型。比方能够用作搜索引擎的 ES,Solar 等,工夫序列数据库 OpenTSDB,InfluxDB 等。更加具体的信息以及数据库排名参见:DB-Engines。
<center>
什么是架构设计?架构设计看这篇文章就够了
Redis 为什么这么快?
重磅:解读 2020 年最新 JVM 生态报告
BIO,NIO,AIO 总结
JDK8 的新个性,你晓得多少?
回复“材料”,收费获取 一份独家呕心整顿的技术材料!
</center>