数据库(Database)是按照一定的数据结构来组织、存储和管理数据的仓库,用户可以对文件中的数据运行新增、截取、更新、删除等操作。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。下面是维基百科上关于数据库的定义:

数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

database

数据库管理系统:

由于数据库中存放的数据可能是多种多样的,而且往往很复杂,我们需要通过一定的工具对它进行管理这就需要用到一系列被称为数据库管理系统的东西。
数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的软件系统,一般都会具有存储、截取、安全保障、备份等基础功能,同时不同的数据库管理系统在一些扩充的功能以及使用界面等稍有不同。具有代表性的数据管理系统有:Oracle、Microsoft SQL Server、Access、MySQL及PostgreSQL等。通常数据库管理员都会使用数据库管理系统来创建数据库系统。

数据库架构

数据库的架构可以大致区分为三个概括层次:内层、概念层和外层。

  • 内层:最接近实际存储体,亦即有关数据的实际存储方式。
  • 外层:最接近用户,即有关个别用户观看数据的方式。
  • 概念层:介于两者之间的间接层。

数据库模型

  • 对象模型
  • 层次模型(轻量级数据访问协议)
  • 网状模型(大型数据储存)
  • 关系模型(由关系数据结构、关系操作集合、关系完整性约束三部分组成)
  • 面向对象模型
  • 半结构化模型
  • 平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)

数据库的类型:

关系数据库

创建在上面提到的关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。

  • MySQLMariaDB(作为MySQL的替代品,英文维基百科已从MySQL转向MariaDB)
  • Percona Server(MySQL的代替品)
  • PostgreSQL
  • Microsoft Access
  • SQL Server
  • FileMaker
  • Oracle
  • Sybase
  • dBASE
  • Clipper
  • FoxPro

非关系型数据库(NoSQL)

不同于传统的关系数据库的数据库管理系统统称为NoSQL。

  • BigTable(Google)
  • Cassandra
  • MongoDB
  • CouchDB

     键值(key-value)数据库

  • Apache Cassandra(为Facebook所使用):高度可扩展
  • Dynamo
  • LevelDB(Google)

关系数据库和非关系型数据库两者存在许多显著的不同点,其中最重要的是NoSQL不使用SQL作为查询语言,其数据存储可以不需要固定的表格模式,也经常会避免使用SQL的JOIN操作,一般有水平可扩展性的特征。NoSQL的实现具有二个特征:使用硬盘,或者把随机存储器作存储载体。

如今典型的关系数据库在一些数据敏感的应用中表现出糟糕的性能,例如为巨量文档创建索引、高流量网站的网页服务,以及发送流媒体等方面。关系型数据库的典型实现主要是用于执行规模小而读写频繁,或者大批量极少写访问的事务。

NoSQL的结构通常提供弱一致性的保证,如最终一致性,或交易仅限于单个的数据项。不过,有些系统,提供完整的ACID保证在某些情况​​下,增加了补充中间件层(例如,CloudTPS)。有两个成熟的系统有提供快照隔离的列存储:像是Google基于过滤器系统的BigTable,和滑铁卢大学开发的HBase。这些系统,自主开发,使用类似的概念来实现多行(multi-row)分布式ACID交易的快照隔离(snapshot isolation)保证为基础列存储,无需额外的数据管理开销,中间件系统部署或维护,减少了中间件层,从而获得性能提升。

另有少数NoSQL系统部署了分布式结构,通常使用分布式散列表(DHT)将数据以冗余方式保存在多台服务器上。依此,扩充系统时候添加服务器更容易,并且扩大了应对服务器失效的容灾能力。

数据库索引

数据索引的观念由来已久,像是一本书前面几页都有目录,目录也算是索引的一种,只是它的分类较广,例如车牌、身份证字号、条码等,都是一个索引的号 码,当我们看到号码时,可以从号码中看出其中的端倪,若是要找的人、车或物品,也只要提供相关的号码,即可迅速查到正确的人事物。

另外,索引跟字段有着相应的关系,索引即是由字段而来,其中字段有所谓的关键字段(Key Field),该字段具有唯一性,即其值不可重复,且不可为”空值(null)”。例如:在合并数据时,索引便是扮演欲附加字段数据之指向性用途的角色。故此索引为不可重复性且不可为空。

数据库操作:事务

事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分区的工作单位。 事务的ACID特性:

  • 基元性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持续性(Durability)

事务的并发性是指多个事务的并行操作轮流交叉运行,事务的并发可能会访问和存储不正确的数据,破坏交易的隔离性和数据库的一致性。

本文主要参考中英文维基百科相关的技术条目,按个人理解重新组织。

具体细节请访问:https://zh.wikipedia.org( 可能需要梯子。。。)