日常工作中,我们通常是跟DBMS这些数据库管理软件打交道,而SQL只是它们的通用语言而已。
DBMS,全称是DataBase Management System,数据库管理系统,实际上它可以对多个数据库进行管理,所以可以理解成 DBMS = 多个数据库(DB) + 管理程序。
DB,全称是DataBase,就是数据库。数据库是数据存储的集合,可以理解成就是多个数据表,或者说一堆数据表的集合就是DB。
DBS,全称是DataBase System,即数据库系统。它是更大的概念,包含了数据库、数据库管理系统,以及数据库管理人员DBA等。
RDBMS,全称是Relational DataBase Management System,即关系型数据库管理系统,是DBMS中的一个大的分类,如MySQL、Oracle等。
这里需要注意,虽然我们平时把MySQL、Oracle等称为是数据库,但严谨来讲,它们应该是DBMS,即数据库管理系统。
了解了什么是DBMS之后,我们可以看下当前主流的DBMS有哪些。
可以从DB-Engines每月公布的DBMS排名来一探究竟,排名主要依据这些DBMS在搜索引擎上的热度等,类似编程语言排行榜TIEBO。下面是我截取的2023年10月份的前二十名的排名:
其中,Relational表示关系型数据库,Document表示文档型数据库,Key-value表示键值型数据库,Search engine表示搜索引擎式,Wide column表示列存式数据库。
从排名上能看到,关系型数据库管理系统(以下按照日常习惯,简称为关系型数据库)是DBMS的绝对主流。
关系型数据库,就是建立在关系模型上的数据库,而SQL就是关系型数据库上的查询语言。
NoSQL泛指非关系型数据库,即除了关系型数据库以外的其他类型数据库,包括了上面说的文档型数据库、键值型数据库、搜索引擎和列存式数据库,除此之外还包括图形数据库。
注意,NoSQL数据库一般是使用自己的查询语言或者API来检索数据,但并非是完全不能用SQL查询,只是不使用传统的SQL查询语言来查询。如MongoDB,就支持类似于SQL的查询语言,通过类似SQL的功能来检索和操作数据。
键值型数据库,通过key-value键值对来存储数据。其中,key是查找每条数据地址的唯一关键字,而值则是该数据实际存储的内容,其可以是简单对象,也可以是复合复杂对象。
由于key作为唯一的标识符,所以查询速度极快。但是缺点也很明显,比如说无法存储结构化信息,同时也无法进行多值查询(即不支持where条件,因为它只能通过key来查询),如果一定要查询值的话,只能通过遍历所有key的方式,通过消耗大量的计算来获取需要的值,这无疑是很低效的。
键值型数据库的典型应用场景式作为内容缓存,其中的代表就是Redis。
文档型数据库,则是以文档的形式存储数据,即将文档作为数据的基本单位,一个文档就相当于一条记录,即类比关系型数据库中的一行。
每个文档都是一个键值对的集合,类似JSON格式。这类数据库的典型代表就是MongoDB,这种文档型存储方式,允许数据库存储和查询具有复杂结构的半结构化数据,这一点,是传统数据库所无法比拟的。
搜索引擎,是数据库检索中的重要应用。常见的全文搜索引擎有Elasticsearch、Splunk和Solr。虽然关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低。搜索引擎的优势在于采用了全文搜索的技术,核心原理是"倒排索引"。
列式数据库是相对于行式存储的数据库。列式数据库是将数据按照列存储到数据库中,相比传统的行式数据库,列式数据库可以大幅度降低系统的IO,适合于分布式文件系统,但功能相对有限。
怎么理解这里的"大幅度降低系统的IO呢?"
因为列式数据库是按列存储的,而每列的数据格式是相同的,所以在存储时,就可以使用更加高效的压缩算法对列进行压缩存储。另外,在读取时,可以只读取需要的列到内存中,而不是像行式数据库那样,将全部行数据都读取到内存汇总。
图形数据库,利用图这种数据结构来存储实体之间的关系。最典型的应用实例就是社交网络中人与人的关系。数据模型主要是以节点(代表实体)和边(代表实体间的关系)来实现,特点在于能够高效的解决复杂的关系问题。
NoSQL包含的分类很多,其包含除了关系型数据库以外的其他类型数据库,比如说上面说的文档型数据库、键值型数据库、搜索引擎和列存式数据库,除此之外还包括图形数据库。
由于SQL一直称霸DBMS,因此很多人开始思考是否有一种数据库技术能够脱离SQL,这就是NoSQL诞生的原因。但是随着发展,大家发现还是SQL更香,于是越来越多的NoSQL的DBMS开始实现类似SQL的功能。从NoSQL在不同时期的释义,可以看出NoSQL功能的演化:
1970 NoSQL = We have no SQL
1980 NoSQL = Know SQL
2000:NoSQL = No SQL!
2005:NoSQL = Not only SQL
2013:NoSQL = No, SQL!
NoSQL更像是对SQL的扩充,虽然它可能没法像SQL那样应用的更加广泛,但是在某些单一领域里,NoSQL表现的比SQL更胜一筹。
TOP3的主流DBMS:Oracle、MySQL和SQL Server。(同时也是RDBMS)这三家顶流的市场份额远超其他DBMS。
1979年,Oracle 2诞生,这是第一个商用的RDBMS,后来被卖给了军方。随着Oracle软件的名气越来越大,公司也直接改名叫做Oracle了。20 世纪 90 年代,Oracle 的创始人埃里森成为继比尔·盖茨之后第二富有的人
MySQL是1995年诞生的开源数据库管理系统,因其免费开源的特性,得到了广泛的关注和使用,是开源数据库当之无愧的NO.1。MySQL在2008年时被SUN公司收购,而2010年SUN公司被Oracle公司收购,于是Oracle公司现在同时掌握了Oracle数据库和MySQL数据库的管理权,属实是数据库领域的绝对领导者。
但是在Oracle收购MySQL的时候,MySQL的创造者担心MySQL有闭源的风险,因此创建了MySQL的分支项目MariaDB。MariaDB在绝大部分的情况下都是与MySQL兼容的,并且额外增加了很多新特性,比如说支持更多的存储引擎。许多企业也从原来的MySQL转移到MariaDB。
从第二小节的图里我们也能看到MariaDB的排名也不低,第13名。
SQL Server是微软开发的商用DBMS,诞生于1989年。但其实微软还有一款轻量级的桌面数据库Access,其同时具备后台存储和前台界面开发的功能,很适合小型的应用场景。了解下就行了。
虽然SQL语言是通用的,但是为了满足不同的使用场景和要求,如何选择自己合适的DBMS是有讲究的。比如说Oracle更适合大型跨国企业的使用,因为他们对费用不敏感,但是对性能要求和安全性要求很高。而MySQL更受互联网公司,尤其是早期初创公司的青睐。
针对市场上那么多DBMS的百花齐放,其实可以理解成是单一的数据库并不能满足所有的市场需求最终诞生了不同的 DBMS,同时为了降低用户更换软件的成本(方便争抢用户)都遵循了 SQL 的标准。