数据库

数据库就是存储、管理数据的仓库。提供了对数据的检索、存储、多用户共享访问的能力,并且设法使数据的冗余度尽可能小。数据库管理系统是为了管理数据库而设计的一套软件系统。

特点

  • 数据共享,可以同时被多人查询和写入。
  • 数据独立,数据库中的数据和业务是独立的。
  • 故障恢复,可以及时发现故障和修复故障,从而防止数据被损坏。
  • 数据冗余度减少,与文件系统相比,数据库实现了数据共享,从而避免了文件的复制,降低了数据冗余度。
  • 数据一致性和可维护性,防止数据丢失和越权使用。同一周期内,允许对数据实现多路存取,也能防止用户之间的数据操作相互影响。

分类

我们平常接触到的关系型数据库非关系型数据库,是按照存储的数据模型来分类的。

  • 关系型数据库:把复杂的数据结构归结为简单的二维表格形式,表格之间的数据关系通过主外键关系来维系。
  • 非关系型数据库:随着应用开发的发展,在某些业务场景下,需要存储的数据并不能简单地抽象为二维表格,存储的数据字段并不能确定,这种场景下使用关系型数据库不利于数据处理,于是直接处理对象的数据库就应运而生了。另外有些应用存储的数据结构简单,并不需要采用关系型数据库,这种场景下也可以选择非关系型数据库存储这类数据。

具象

关系型数据库

关系型数据库一般通过 SQL(Structured Query Language,结构化查询语言)来操作数据库。采用 SQL 作为查询语言,对数据进行增、删、改、查等操作,也可以维护数据库,定义数据表的结构。

  • Oracle:由 Oracle 公司开发,目前占据市场的主要份额。
  • MySQL:开源的关系型数据库系统,于 2008 年被 Sun 公司收购。2009年,Oracle公司收购了 Sun,MySQL 也成了 Oracle 公司旗下的产品。由于其高性能、低成本、强可靠性的特点,已经成为流行的开源数据库,被广泛用于各种大小规模的应用系统中。
  • MariaDB:Oracle公司收购 MySQL 之后,大幅调高了 MySQL 商业版的售价。并且,Oracle 公司不再支持另一个被其收购的开源软件OpenSolaris 的发展,因此导致社区对 MySQL 前景的担忧。在这样的背景下,MySQL 创始人以 MySQL 为基础,成立了分支计划MariaDB。
  • Microsoft SQL Server:由微软公司开发,主要运行在 Windows Server 中。

非关系型数据库

非关系型数据库一般不采用 SQL 作为查询语言,也避免使用类似 SQL 中的 JOIN 操作来关联多张数据表。

  • MongoDB:一种文档导向的数据库,直接存储对象,不必像关系型数据库那样需要限定存储的数据格式。在 Node.js 应用中,大都数应用采用 MongoDB 来存储数据。
  • Redis:一套基于内存可持久化键值对存储数据库,支持主从同步。业界大多采用 Redis 作为高速缓存方案。
  • Memcached:一套分布式高速缓存系统,基于键值存储,通常用于应用的高速缓存。由于 Memcached 不支持数据持久化,大多被 Redis 所取代。

一般来说,非关系数据库存储的数据结构比较简单,并且大多数不需要支持复杂的查询。在开发时,结构简单的应用一般会采用 MongoDB 这样的数据库来存储,为了提升系统性能,一般也会采用 Redis 这样的内存数据库作为高速缓存。