数据库基础

  1. 数据库(DatabaseDB)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。
  2. 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

什么是数据库

人们通常用数据库这个术语来代表他们使用的数据库软件。这是不正确的,它是引起混淆的根源。确切地说,数据库软件应称为DBMS(数据库管理系统)。数据库是通过 DBMS 创建和操纵的容器。数据库可以是保存在硬设备上的文件,但也可以不是。在很大程度上说,数据库究竟是文件还是别的什么东西并不重要,因为你并不直接访问数据库;你使用的是DBMS,它替你访问数据库。

  1. 数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。简单来说可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。

数据库分类

关于数据库的分类有很多,大致可以分为两类,一个是关系数据库,另一个非关系数据库

关系型数据库(SQL)

概念

  1. 关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。
  2. RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
  1. 数据以表格的形式出现
  2. 每行为各种记录名称
  3. 每列为记录名称所对应的数据域
  4. 许多的行和列组成一张表单
  5. 若干的表单组成database

优点

(1)容易理解,二维表的结构非常贴近现实世界,二维表格,容易理解。

(2)使用方便,通用的sql语句使得操作关系型数据库非常方便。

(3)易于维护,数据库的ACID属性,大大降低了数据冗余和数据不一致的概率。

瓶颈

1.海量数据的读写效率

  1. 对于网站的并发量高,往往达到每秒上万次的请求,对于传统关系型数据库来说,硬盘I/o是一个很大的挑战。

2.高扩展性和可用性

  1. 在基于web的结构中,数据库是最难以横向拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像web Server那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能力。

常见的数据库

  • MySQL(关系型数据库的代表,开源免费,市场上常见的一种数据库)
  • MariaDB(与MySQL同一个作者,也是作为MySQL的代替品)
  • PostgreSQL(支持二次开发,扩展功能)
  • SQL Server(老牌数据库软件,目前主流并不使用)
  • Oracle(安全性能极高,但使用和维护收费成本太高)
  • SQLite(小型数据库。但是功能较少,主要用于本地测试使用)

从关系型到非关系型

  1. 关系型数据库的最大优点就是事务的一致性,这个特性,使得关系型数据库中可以适用于一切要求一致性比较高的系统中。比如:银行系统。
  2. 但是在网页应用中,对这种一致性的要求不是那么的严格,允许有一定的时间间隔,所以关系型数据库这个特点不是那么的重要了。相反,关系型数据库为了维护一致性所付出的巨大代价就是读写性能比较差。而像微博、facebook这类应用,对于并发读写能力要求极高,关系型数据库已经无法应付。所以必须用一种新的数据结构存储来替代关系型数据库。所以非关系型数据库应用而生。

非关系型数据库(NoSQL)

概念

NoSQL非关系型数据库,主要指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统

NoSQL提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,为了获取用户的不同信息,不需要像关系型数据库中,需要进行多表查询。仅仅需要根据key来取出对应的value值即可

分类

  1. 非关系数据库大部分是开源的,实现比较简单,大都是针对一些特性的应用需求出现的。根据结构化方法和应用场景的不同,分为以下几类。

1.面向高性能并发读写的key-value数据库

主要特点是具有极高的并发读写性能,例如Redis、Tokyo Cabint等。

2.面向海量数据访问的面向文档数据库

特点是,可以在海量的数据库快速的查询数据。例如MongoDB以及CouchDB.

3.面向可拓展的分布式数据库

解决的主要问题是传统数据库的扩展性上的缺陷。

缺点

  1. 但是由于Nosql约束少,所以也不能够像sql那样提供where字段属性的查询。因此适合存储较为简单的数据。有一些不能够持久化数据,所以需要和关系型数据库结合。

常见的数据库

  • Redis(目前最火的非关系型数据库,属于键值型数据存储,支持高并发的快速数据访问多用来作为缓存使用,以提高数据读取效率)
  • MongoDB(介于关系数据库和非关系数据库之间的数据库,功能非常最丰富,主要用于爬虫和大数据)
  • Memcache(被redis取代)