首先咱们看一下DB-Engines(https://db-engines.com/en/ranking)的数据库流行度排行榜。虽然只截取了前二十,但也基本囊括了常见的数据库。当然,咱们这里不讨论云数据库。
这里简单对数据库的一些基本概念画了个图。遵循基本原则,尽量不讲重复的知识点,只挑几个重点讲一下,没讲到的那些专业术语大家有兴趣就百度吧。
对DB-Engines上的部分数据库也做个表格如下: 注:只讨论社区版/单机版,企业版/集群版本不包含在其中 请不要钻空子:比如Windows下的ORACLE就是单进程的,它用于教育和学习是不收费的等等。。。
数据库是否关系型是否付费是否开源单/多进程ORACLE关系型数据库收费闭源多进程架构MySQL关系型数据库免费开源单进程架构MSSQL关系型数据库收费闭源单进程架构PostgreSQL关系型数据库免费开源多进程架构MongoDB文档数据库(非关系型)免费开源单进程架构DB2关系型数据库收费闭源多进程架构Elasticsearch搜索引擎数据库(非关系型)免费开源单进程架构Redis键值/内存数据库(非关系型)免费开源单进程架构MariaDB关系型数据库免费开源单进程架构HBase列存储数据库(非关系型)免费开源单进程架构Neo4J图形数据库(非关系型)免费开源单进程架构InfluxDB时序数据库(非关系型)免费开源单进程架构不知道大家有没有听到关于多进程和单进程这两种架构的争论?其实也没啥好争论的,两种架构各有优缺点。这里简单说下单进程和多进程架构(以ORACLE和MySQL为比较对象): 单进程数据库其实就是在操作系统中体现为一个独立的服务进程。单进程多线程的架构,进程数据共享,所以线程之间的通讯效率非常高,对于大规模并发十分有利,不过也会出现线程数过多,线程调度开销过大甚至OOM的情况。所以这种架构比较适合小访问中连接大并发的场景。 而多进程架构的每个服务都是独立的进程,他们之间的隔离比较好,互相影响较小。但同样由于独立,他们之间的数据共享和进程交互就比较复杂了,不过ORACLE无与伦比的内存结构技术让其不惧任何挑战。
说到数据库,又不得不说实例。可能大家经常听到数据库,实例这样的名词。那么到底什么是数据库,什么是实例?(这也是我非常喜欢用来面试初/中级DBA的一个题目) 数据库就是用来存储数据的,但是数据库怎么对外提供服务和访问?应用程序直接打开数据文件操作数据库?还是通过某种媒介去访问数据库? 显而易见,应用程序无法直接访问数据库,而需要通过一种逻辑结构去访问数据库,这个结构被称之为实例(Instance)。换句话说就是数据库实例是访问数据库的通道。
数据库:就是一系列的物理文件,拿ORACLE来说,有密码文件、参数文件、控制文件、数据文件、日志文件等 实例:就是操作系统中为数据库服务的一系列进程以及为这些进程所分配使用的内存。