SQLite、MySQL、PostgreSQL:比较关系数据库管理系统

在这种DigitalOcean文章中,我们将试着去了解一些最常用的和流行的关系数据库管理系统(RDBMS)的核心分歧。我们将探讨其基本差异的特性和功能方面,它们是如何工作,以及何时之一,以帮助开发者选择RDBMS过人之处比其他。

介绍


关系数据库已经使用了很长时间。由于实施关系模型的管理系统非常好,它们变得非常受欢迎,这被证明是一种处理数据的好方法(特别是对于关键任务应用程序)。 在这篇DigitalOcean文章中,我们将尝试理解一些最常用和流行的关系数据库管理系统(RDBMS)的核心区别。我们将探讨它们在特性和功能,它们如何工作以及何时优于其他方面的根本区别,以帮助开发人员选择RDBMS。

词汇表


数据库管理系统


  1. 关系数据库管理系统
  2. 关系和数据类型
  3. 关系数据库

2. SQLite


  1. SQLite的支持数据类型
  2. SQLite的优点
  3. SQLite的缺点
  4. 何时使用SQLite
  5. 何时不使用SQLite

MySQL


  1. MySQL支持的数据类型
  2. MySQL的优点
  3. MySQL的缺点
  4. 何时使用MySQL
  5. 何时不使用MySQL

PostgreSQL


  1. PostgreSQL支持的数据类型
  2. PostgreSQL的优点
  3. PostgreSQL的缺点
  4. 何时使用PostgreSQL
  5. 何时不使用PostgreSQL

数据库管理系统


数据库是用于所有种类的不同信息(数据)的逻辑建模的存储空间。除了无模式的数据库之外,每个数据库都有一个模型,它为要处理的数据提供结构。数据库管理系统是管理各种形状,大小和排序的数据库的应用程序(或库)。 注意:要了解更多关于数据库管理系统,看看我们的文章: 了解数据库

关系数据库管理系统


关系数据库系统实现关系模型来处理数据。关系模型通过将它们定义为具有跨表的属性(即模式)的相关实体来形成要存储的任何信息。 这些类型的数据库管理系统需要定义结构(例如表格)以便包含和使用数据。使用表,每列(例如属性)保存不同类型(例如数据类型)的信息。数据库中的每个记录,与密钥唯一地识别,转换到属于一个表,其中的每一行的一系列属性被表示为表的列的行-所有相关在一起,作为关系模型中进行定义。

关系和数据类型


关系可以被认为是包含一系列属性的数学集合,这些属性共同地表示数据库和被保存的信息。这种类型的标识和收集方法允许关系数据库按照它们的方式工作。 当定义一个表中插入记录,每个记录元件形成的记录(即属性)必须定义数据类型 (例如整数,日期等)的匹配。不同的关系数据库管理系统实现不同的数据类型 - 这并不总是可以直接互换的。 使用和通过约束,像我们刚才解释的,是关系数据库的常见。事实上,约束形成了关系的核心。 注意:如果你需要真正的与工作无关的,随机所表示的信息(如文档),你可能会感兴趣的使用NoSQL的(无模式的数据库)。 如果您想了解更多关于他们,看看我们的文章比较NoSQL数据库管理系统
在本文中,我们将介绍三个主要和重要的开源关系数据库管理系统,它们有助于塑造应用程序开发的世界。
  • SQLite:
一个非常强大的嵌入式关系数据库管理系统。
  • MySQL:
最流行和常用的RDBMS。
  • PostgreSQL:
最先进的,SQL兼容和开源的目标RDBMS。 注:开源应用几乎总是能够自由使用任何需要的方式。 大多数时候自由的fork项目(因此使用代码)创建新的东西也是允许的。 如果你的DBMS有兴趣,你可能想看看一些分叉项目,基于这些流行的,如MariaDB 。

SQLite


SQLite是一个惊人的库,嵌入在使用的应用程序内。作为一个独立的,基于文件的数据库,SQLite提供了一套惊人的工具来处理各种类型的数据,与托管,基于过程(服务器)的关系数据库相比,约束和容易性更小。 当应用程序使用SQLite时,集成与对保存数据的文件(即SQLite数据库)进行功能和直接调用,而不是通过各种接口(即端口,套接字)进行通信。这使得SQLite非常快速和高效,也强大的感谢图书馆的基础技术。

SQLite的支持数据类型


  • 空值:
NULL值。
  • 整数:
有符号整数,存储在1,2,3,4,6或8字节,具体取决于值的大小。
  • 真实:
浮点值,存储为8字节IEEE浮点数。
  • 文本:
文本字符串,使用数据库编码(UTF-8,UTF-16BE或UTF-16LE)存储。
  • BLOB:
一个数据块,与输入完全一样。 注意:要了解更多有关的SQLite的数据类型和SQLite的类型亲和力,检查出的官方文档上的对象。

SQLite的优点


  • 基于文件:
整个数据库由磁盘上的一个文件组成,这使得它非常便携。
  • 标准感知:
虽然它可能看起来像一个“简单”数据库实现,SQLite使用SQL。 它省略了一些功能( RIGHT OUTER JOINFOR EACH STATEMENT ),然而,一些额外的人在烘焙。
  • 伟大的开发甚至测试:
在大多数应用程序的开发阶段,对于大多数人来说,极有可能需要一个可扩展并发性的解决方案。 SQLite具有丰富的功能基础,可以提供超过开发所需的功能,简单的使用单个文件和链接的C库。

SQLite的缺点


  • 无用户管理:
高级数据库提供对用户的支持,即具有对数据库和表的设置访问权限的托管连接。鉴于SQLite的目的和性质(没有更高级别的多客户端并发),这个特性不存在。
  • 缺乏修补补充性能的可能性:
再次通过设计,SQLite是不可能修改获得大量额外的性能。该库易于调整和使用简单。因为它不复杂,在技术上不可能使它比它已经更高性能,令人惊讶的是。

何时使用SQLite


  • 嵌入式应用:
所有需要可移植性,不需要扩展的应用程序,例如单用户本地应用程序,移动应用程序或游戏。
  • 磁盘访问替换:
在许多情况下,需要读取的应用程序/直接文件写入磁盘可以从切换到的SQLite附加功能和简单来自使用结构化查询语言 (SQL)受益。
  • 测试:
对于大部分应用程序来说,使用附加过程来测试业务逻辑(即应用程序的主要目的:功能)是一种过度的。

何时不使用SQLite


  • 多用户应用程序:
如果你正在处理一个应用程序,多个客户端需要访问和使用相同的数据库,一个功能齐全的RDBM(例如MySQL)可能更好地选择SQLite。
  • 需要高写入量的应用程序:
之一的SQLite的局限性是写入操作。该DBMS仅允许在任何给定时间发生一次单一写入操作,因此允许有限的吞吐量。

MySQL


MySQL是所有大型数据库服务器中最受欢迎的一种。它是一个功能丰富的,开源的产品,在很多网站和应用程序在线。 MySQL的入门相对容易,开发人员可以访问关于互联网上的数据库的大量信息。 注:应该指出,鉴于该产品的普及,有很多的第三方应用程序,工具和集成库,这与此RDBMS工作的许多方面有很大的帮助。 尽管没有尝试实现完整的SQL标准,MySQL为用户提供了很多功能。作为一个独立的数据库服务器,应用程序与MySQL守护进程访问数据库本身 - 不同于SQLite。

MySQL支持的数据类型


  • TINYINT:
一个非常小的整数。
  • SMALLINT:
一个小整数。
  • MEDIUMINT:
中型整数。
  • INT或INTEGER:
正常大小的整数。
  • BIGINT:
一个大整数。
  • FLOAT:
一个小(单精度)浮点数。无法未签名。
  • DOUBLE,DOUBLE PRECISION,REAL:
正常大小(双精度)浮点数。无法未签名。
  • DECIMAL,NUMERIC:
未打包的浮点数。无法未签名。
  • DATE:
一个约会。
  • DATETIME:
日期和时间组合。
  • TIMESTAMP:
时间戳。
  • TIME:
一次。
  • YEAR:
一年为2位或4位格式(默认为4位数)。
  • CHAR:
一个固定长度的字符串,存储时总是用空格填充指定的长度。
  • VARCHAR:
可变长度字符串。
  • TINYBLOB,TINYTEXT:
最大长度为255(2 ^ 8 - 1)个字符的BLOB或TEXT列。
  • BLOB,TEXT:
最大长度为65535(2 ^ 16 - 1)个字符的BLOB或TEXT列。
  • MEDIUMBLOB,MEDIUMTEXT:
最大长度为16777215(2 ^ 24 - 1)个字符的BLOB或TEXT列。
  • LONGBLOB,LONGTEXT:
BLOB或TEXT列,最大长度为4294967295(2 ^ 32 - 1)个字符。
  • ENUM:
枚举。
  • SET:
set 集合。

MySQL的优点


  • 易于使用:
MySQL可以很容易地安装。第三方工具,包括可视化工具(即GUI)使得开始使用数据库非常简单。
  • 功能丰富:
MySQL支持很多从RDBMS预期的SQL功能 - 直接或间接。
  • 安全:
许多安全功能,一些相当高级,在MySQL内置。
  • 可扩展和强大:
MySQL能够处理大量的数据,此外它可以通过“大规模”被使用,如果需要的话可以。
  • 迅速:
放弃一些标准允许MySQL非常有效地工作,并且削减角落,从而提供速度增益。

MySQL的缺点


  • 已知限制:
根据设计,MySQL并不打算做任何事情,它具有一些最先进的应用程序可能需要的功能限制。
  • 可靠性问题:
某些功能使用MySQL处理的方式(例如引用,事务,审计等)使得它与一些其他RDBMS相比不太可靠。
  • 停滞发展:
虽然MySQL仍然是一个开源产品的技术,但是自从收购以来,有关于开发过程的投诉。但是,应该注意的是,有一些基于MySQL的完全集成的数据库在标准MySQL安装(例如MariaDB)上增加了价值。

何时使用MySQL


  • 分布式操作:
当你需要的不仅仅是SQLite可以提供的东西,包括MySQL到你的部署栈,就像任何独立的数据库服务器一样,带来了很多的操作自由以及一些高级功能。
  • 高安全性:
MySQL的安全特性以简单的方式为数据访问(和使用)提供可靠的保护。
  • 网站和网络应用程序:
尽管有限制,绝大多数网站(和网络应用程序)可以简单地在MySQL上工作。这种灵活和有点可扩展的工具易于使用和易于管理 - 这证明在长期非常有帮助。
  • 定制解决方案:
如果你正在研究一个高度具体和极端定制的解决方案,MySQL可以轻松地标记和遵循你的规则,由于其丰富的配置设置和操作模式。

何时不使用MySQL


  • SQL合规性:
由于MySQL没有[尝试]实现完整的SQL标准,所以这个工具并不完全符合SQL。如果你可能需要与这样的RDBMS集成,从MySQL切换不容易。
  • 并发:
尽管MySQL和一些存储引擎与操作执行得很好,并发读取写入可能会有问题。
  • 缺少功能:
再次,根据数据库引擎的选择,MySQL可能缺乏某些功能,例如全文搜索。

PostgreSQL


PostgreSQL是先进的,开放源码的[对象] -关系数据库管理里面有被符合标准的,可扩展的主要目标体系。 PostgreSQL或Postgres试图与修订版一起采用ANSI / ISO SQL标准。 与其他RDBMS相比,PostgreSQL本身不同于对高度需要和完整的面向对象和/或关系数据库功能的支持,例如对可靠事务(即原子性,一致性,隔离,耐久性(ACID))的完全支持。 由于强大的底层技术,Postgres非常能够非常有效地处理许多任务。由于实现了多版本并行控制(MVCC),支持并发性实现没有读锁定,这也确保了ACID的兼容性。 PostgreSQL是高度可编程的,因此是可扩展的,有称为“存储过程”的自定义过程。可以创建这些函数以简化重复,复杂和经常需要的数据库操作的执行。 虽然这个DBMS没有MySQL的流行,有许多惊人的第三方工具和库,旨在使工作与PostgreSQL简单,尽管这个数据库的强大的性质。现在,可以通过许多操作系统的默认包管理器轻松地将PostgreSQL作为应用程序包。

PostgreSQL支持的数据类型


  • bigint:
带符号的8字节整数
  • bigserial:
自动增量八字节整数
  • bit [(n)]:
固定长度的位串
  • bit varying [(n)]:
可变长度位串
  • boolean:
逻辑布尔(true / false)
  • box:
在飞机上的矩形框
  • bytea:
二进制数据(“字节数组”)
  • character varying [(n)]:
可变长度字符串
  • character [(n)]:
固定长度字符串
  • cidr:
IPv4或IPv6网络地址
  • circle:
在平面上的圆
  • date:
日历日期(年,月,日)
  • double precision:
双精度浮点数(8字节)
  • inet:
IPv4或IPv6主机地址
  • integer:
带符号的四字节整数
  • interval [fields] [(p)]:
时间跨度
  • line:
在飞机上的无限线
  • lseg:
线段在平面上
  • macaddr:
MAC(介质访问控制)地址
  • money:
货币金额
  • numeric [(p, s)]:
可选精度的精确数值
  • path:
在飞机上的几何路径
  • point:
几何点在飞机上
  • polygon:
在飞机上的闭合的几何路径
  • real:
单精度浮点数(4字节)
  • smallint:
带符号的双字节整数
  • serial:
自动增量四字节整数
  • text:
可变长度字符串
  • time [(p)] [without time zone]:
时间(无时区)
  • time [(p)] with time zone:
时间,包括时区
  • timestamp [(p)] [without time zone]:
日期和时间(无时区)
  • timestamp [(p)] with time zone:
日期和时间,包括时区
  • tsquery:
文本搜索查询
  • tsvector:
文本搜索文档
  • txid_snapshot:
用户级事务标识快照
  • uuid:
通用唯一标识符
  • xml:
XML数据

PostgreSQL的优点


  • 符合开放源代码SQL标准的RDBMS:
PostgreSQL是开源的和免费的,但是一个非常强大的关系数据库管理系统。
  • 强社区:
PostgreSQL由一个专门和经验丰富的社区支持,可以通过知识库和Q&A网站24/7免费访问。
  • 强大的第三方支持:
不管极其先进的功能,PostgreSQL装有许多伟大的和开源的第三方工具,用于设计,管理和使用管理系统。
  • 可扩展:
可以使用存储过程以编程方式扩展PostgreSQL,如同高级RDBMS应该。
  • 目的:
PostgreSQL不仅仅是一个关系数据库管理系统,而是一个客观的 - 支持嵌套和更多。

PostgreSQL的缺点


  • 性能:
对于简单的 -重型操作时,PostgreSQL可以是超杀,可能显得比同行,如MySQL少高性能。
  • 人气:
考虑到这个工具的性质,它缺乏流行性,尽管大量的部署 - 这可能会影响可能获得支持是多么容易。
  • 主机:
由于上述因素,提供托管PostgreSQL实例的主机或服务提供商难以获得。

何时使用PostgreSQL


  • 数据的完整性:
当可靠性和数据完整性是绝对必要的,没有借口,PostgreSQL是更好的选择。
  • 复杂,自定义过程:
如果你需要你的数据库来执行自定义过程,PostgreSQL是可扩展的,是更好的选择。
  • 积分:
将来,如果将整个数据库系统迁移到合适的解决方案(如Oracle)解决方案时出现必然性的机会,PostgreSQL将是交换机最兼容和易于处理的基础。
  • 复杂设计:
与其他开源和免费RDBMS实现相比,对于复杂的数据库设计,PostgreSQL提供了最多的功能和可能性,而不放弃其他有价值的资产。

何时不使用PostgreSQL


  • 速度:
如果您需要的所有快速读取操作,PostgreSQL是不是去的工具。
  • 简单设置:
除非你需要绝对的数据完整性,ACID兼容性或复杂的设计,PostgreSQL可能是一个过度杀死简单的设置。
  • 复制:
除非你愿意花费时间,精力和资源,否则使用MySQL实现复制对于缺乏数据库和系统管理经验的人来说可能更简单。