Skip to main content

数据库介绍

等不及想上手?别急,在学习数据库的基本操作之前,让我们先来了解一些数据库的基本信息

数据库的定义和用途

What is so called 'DataBase'?

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的资料执行新增、截取、更新、删除等操作。

所谓“数据库”是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。一个数据库由多个表空间(Tablespace)构成。

数据库类型

随着数据库技术与其他分支学科技术的结合,出现了多种新型数据库,例如:与分布处理技术结合产生的分布式数据库、与并行处理技术结合产生的并行数据库、与人工智能结合产生的演绎数据库、与多媒体技术结合产生的多媒体数据库。另外,数据库技术应用于特定的领域,出现了工程数据库、 地理数据库、统计数据库、空间数据库等特定领域数据库。

关系型数据库(RDBMS)

  • MySQL
  • MariaDB(MySQL的代替品,维基媒体基金会项目已从MySQL转向MariaDB)
  • Percona Server(MySQL的代替品)
  • PostgreSQL
  • Microsoft Access
  • Microsoft SQL Server
  • $\cdots$

关系型数据库,是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。

关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。

非关系型数据库(NoSQL)

  • BaseX(使用语言:XQuery,Java)
  • CouchDB(使用语言:Erlang)
  • eXist(使用语言:XQuery)
  • iBoxDB(使用语言:Java,C#)
  • Jackrabbit(使用语言:Java)
  • Lotus Notes(使用语言:LotusScript,Java等)
  • $\cdots$

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。 少数NoSQL系统部署了分布式结构,通常使用分布式散列表(DHT)将数据以冗余方式保存在多台服务器上。依此,扩充系统时候添加服务器更容易,并且扩大了对服务器失效的承受能程度。

时间序列数据库(TSDB)

  • Apache Druid(使用语言:Java)
  • Apache IoTDB(使用语言:Java)
  • Apache Pinot(使用语言:Java)
  • CrateDB Apache(使用语言:Java)
  • eXtremeDB(使用语言:SQL, Python, C / C++, Java)
  • InfluxDB(使用语言:Go)
  • $\cdots$

时序数据是随时间不断产生的一系列数据,简单来说,就是带时间戳的数据。时序数据库(Time Series Database,TSDB) 是优化用于摄取、处理和存储时间戳数据的数据库。此类数据可能包括来自服务器和应用程序的指标、来自物联网传感器的读数、网站或应用程序上的用户交互或金融市场上的交易活动。

图数据库

  • AllegroGraph(使用语言:C#, C, Common Lisp, Java, Python)
  • Amazon Neptune(使用语言:未披露)
  • AnzoGraph(使用语言:C, C++)
  • ArangoDB(使用语言:C++, JavaScript, .NET, Java, Python, Node.js, PHP, Scala, Go, Ruby, Elixir)
  • DataStax Enterprise Graph(使用语言:Java)
  • HugeGraph(使用语言: Java, Gremlin, Python)
  • $\cdots$

在计算机科学中,图数据库(graph database,GDB) 是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。这些关系允许直接将存储区中的数据链接在一起,并且在许多情况下,可以通过一个操作进行检索。图数据库将数据之间的关系作为优先级。查询图数据库中的关系很快,因为它们永久存储在数据库本身中。可以使用图数据库直观地显示关系,使其对于高度互连的数据非常有用。

列存储数据库

  • Apache Druid(使用语言:Java)
  • Apache Kudu(使用语言:C++)
  • Apache Pinot(使用语言:Java)
  • Calpont InfiniDB(使用语言:C++)
  • ClickHouse(使用语言:C++ )
  • CrateDB(使用语言:Java
  • $\cdots$

列式数据库(Column-oriented DBMS) 是以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即时查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合于小批量的数据处理,常用于联机事务型数据处理。

以上即是对数据库类型的大致介绍。当然,关系数据库是我们学习的重中之重,其他的(数据库)大家可以在课后之余自行研究哟。

关系型与非关系型数据库对比

关系型数据库和非关系型数据库在数据模型、数据结构、数据操作和数据存储等方面存在明显的差异。关系型数据库采用了基于表格的二维数据模型,而非关系型数据库则可以采用多种数据模型,如键值、文档、图形等。

关系型数据库的优点包括容易理解,使用方便,易于维护。但是它也有瓶颈,例如海量数据的读写效率和高扩展性和可用性。

非关系型数据库提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段。这种就不会局限于固定的结构,可以减少一些时间和空间的开销。

数据模型和查询语言(如 SQL 和 NoSQL 查询)

关系型数据库采用了基于表格的二维数据模型,而非关系型数据库则可以采用多种数据模型,如键值、文档、图形等。在sql中,必须定义好地段和表结构之后,才能够添加数据,例如定义表的主键、索引、外键等。表结构可以在定义之后更新,但是如果有比较大的结构变更,就会变的比较复杂;而在Nosql数据库中,数据可以在任何时候任何地方添加。不需要预先定义。

另外,关系型数据库使用 SQL 作为操作语言,包括数据查询、插入、修改和删除等操作,而非关系型数据库使用不同的 API 或命令进行数据操作。

事务支持与一致性保证

SQL中如果多张表需要同批次被更新,即如果其中一张表跟新失败的话,其他表也不会更新成功。这种场景可以通过事务来控制,可以在所有命令完成之后,再统一提交事务。在Nosql中没有事务这个概念,每一个数据集都是原子级别的。

读写性能和扩展性

关系型数据库通常以数据库表的形式存储,例如存储用户信息,SQL中增加外部关系的话,需要在原表中增加一个外键,来关联外部数据表;

关系型数据库为了规范性,把数据分配成为最小的逻辑表来存储避免重复,获得精简的空间利用。但是多个表之间的关系限制,多表管理就有点复杂。

当然精简的存储可以节约宝贵的数据存储,但是现在随着社会的发展,磁盘上付出的代价是微不足知道的。

为了支持更多的并发量,SQL数据采用纵向扩展,提高处理能力,通过提高计算机性能来提高处理能力。

而非关系型数据库,如NoSql采用key-value的形式存储。其作为平面数据集合中,数据经常可以重复,单个数据库很少被分开,而是存储成为一个整体,这种整块读取数据效率更高。

此外,通过横向拓展,致使非关系型数据库是分布式的,所以可以通过集群来实现负载均衡。

使用场景和选择依据

比如:关系型是结构化查询语言,NoSql是采用更简单而且精确的数据访问方式;SQl数据库大多比较昂贵,而NoSql大多是开源的。

MySQL 数据库

正如你所见,MySQL 是最流行的关系型数据库管理系统之一,也是在 WEB 应用方面 MySQL 是最好的应用软件之一。理所当然的,本教程我们主要理解关于MySQL的操作。

简介与历史

MySQL (官方发音为/maɪ ˌɛskjuːˈɛl/“My S-Q-L”,但也经常被读作/maɪ ˈsiːkwəl/“My Sequel”) 原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。

MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。

但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社群们对于Oracle是否还会持续支持MySQL社群版(MySQL之中唯一的免费版本)有所隐忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。而原先一些使用MySQL的开源软件逐渐转向MariaDB或其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库。

MySQL的license现在分为免费的社区版与收费的标准版、企业版等。一般说来,如果在非开源项目中发布了MySQL,或者需要Oracle公司提供对MySQL的技术支持,或者使用MySQL的一些企业版工具或插件,或者修改MySQL源代码并作为闭源的软件等等情形,需要购买商业版本。如果只是安装并使用MySQL,甚至修改并使用MySQL,无论是否收费;或者软件中不包含MySQL,软件的用户自行安装MySQL;或者使用GPL协议的开源软件产品中包含了MySQL,这些情形可能使用社区版MySQL。

MySQL 的优势和应用场景

你即将学习的 MySQL 作为一种开源的关系型数据库管理系统,它有以下几个优势:

  1. 使用的 SQL 语言是用于访问数据库的最常用的标准化语言。

  2. 数据库体积小、速度快、总体拥有成本低。

  3. MySQL 支持多种存储引擎,可以根据不同的需求选择合适的存储方式。

  4. MySQL 支持多种平台和操作系统,具有良好的兼容性和可移植性。

MySQL 的应用场景主要有以下几种:

  1. Web 网站开发:

    MySQL 是 Web 网站开发者们最青睐的数据库管理系统之一,因为它简单易用,性能出色,而且免费。

  2. 日志记录系统:

    MySQL 数据库的插入和查询性能都非常高效,适合处理大量的日志数据,如用户登录日志,操作日志等。

  3. 数据仓库系统:

    MySQL 数据库可以支持海量数据的存储和分析,适合构建数据仓库和数据挖掘应用。