SQLite、MySQL、PostgreSQL:比较关系数据库管理系统
2014-02-21
分类:系统运维
阅读()
评论()
介绍
关系数据库已经使用了很长时间。由于实施关系模型的管理系统非常好,它们变得非常受欢迎,这被证明是一种处理数据的好方法(特别是对于关键任务应用程序)。 在这篇DigitalOcean文章中,我们将尝试理解一些最常用和流行的关系数据库管理系统(RDBMS)的核心区别。我们将探讨它们在特性和功能,它们如何工作以及何时优于其他方面的根本区别,以帮助开发人员选择RDBMS。
词汇表
数据库管理系统
- 关系数据库管理系统
- 关系和数据类型
- 关系数据库
2. SQLite
- SQLite的支持数据类型
- SQLite的优点
- SQLite的缺点
- 何时使用SQLite
- 何时不使用SQLite
MySQL
- MySQL支持的数据类型
- MySQL的优点
- MySQL的缺点
- 何时使用MySQL
- 何时不使用MySQL
PostgreSQL
- PostgreSQL支持的数据类型
- PostgreSQL的优点
- PostgreSQL的缺点
- 何时使用PostgreSQL
- 何时不使用PostgreSQL
数据库管理系统
数据库是用于所有种类的不同信息(数据)的逻辑建模的存储空间。除了无模式的数据库之外,每个数据库都有一个模型,它为要处理的数据提供结构。数据库管理系统是管理各种形状,大小和排序的数据库的应用程序(或库)。
注意:要了解更多关于数据库管理系统,看看我们的文章:
了解数据库 。
关系数据库管理系统
关系数据库系统实现关系模型来处理数据。关系模型通过将它们定义为具有跨表的属性(即模式)的相关实体来形成要存储的任何信息。 这些类型的数据库管理系统需要定义结构(例如表格)以便包含和使用数据。使用表,每列(例如属性)保存不同类型(例如数据类型)的信息。数据库中的每个记录,与
密钥唯一地识别,转换到属于一个表,其中的每一行的一系列属性被表示为表的列的行-所有相关在一起,作为关系模型中进行定义。
关系和数据类型
关系可以被认为是包含一系列属性的数学集合,这些属性共同地表示数据库和被保存的信息。这种类型的标识和收集方法允许关系数据库按照它们的方式工作。 当定义一个表中插入记录,每个记录元件形成的记录(即属性)必须定义
数据类型 (例如整数,日期等)的匹配。不同的关系数据库管理系统实现不同的数据类型 - 这并不总是可以直接互换的。 使用和通过约束,像我们刚才解释的,是关系数据库的常见。事实上,约束形成了关系的核心。
注意:如果你需要真正的与工作无关的,随机所表示的信息(如文档),你可能会感兴趣的使用NoSQL的(无模式的数据库)。 如果您想了解更多关于他们,看看我们的文章
比较NoSQL数据库管理系统 。
关系数据库
在本文中,我们将介绍三个主要和重要的开源关系数据库管理系统,它们有助于塑造应用程序开发的世界。
一个非常强大的嵌入式关系数据库管理系统。
最流行和常用的RDBMS。
最先进的,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)存储。
一个数据块,与输入完全一样。
注意:要了解更多有关的SQLite的数据类型和SQLite的类型亲和力,检查出的
官方文档上的对象。
SQLite的优点
整个数据库由磁盘上的一个文件组成,这使得它非常便携。
虽然它可能看起来像一个“简单”数据库实现,SQLite使用SQL。 它省略了一些功能(
RIGHT OUTER JOIN
或
FOR 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支持的数据类型
一个非常小的整数。
一个小整数。
中型整数。
正常大小的整数。
一个大整数。
一个小(单精度)浮点数。无法未签名。
- DOUBLE,DOUBLE PRECISION,REAL:
正常大小(双精度)浮点数。无法未签名。
未打包的浮点数。无法未签名。
一个约会。
日期和时间组合。
时间戳。
一次。
一年为2位或4位格式(默认为4位数)。
一个固定长度的字符串,存储时总是用空格填充指定的长度。
可变长度字符串。
最大长度为255(2 ^ 8 - 1)个字符的BLOB或TEXT列。
最大长度为65535(2 ^ 16 - 1)个字符的BLOB或TEXT列。
最大长度为16777215(2 ^ 24 - 1)个字符的BLOB或TEXT列。
BLOB或TEXT列,最大长度为4294967295(2 ^ 32 - 1)个字符。
枚举。
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
由于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支持的数据类型
带符号的8字节整数
自动增量八字节整数
固定长度的位串
可变长度位串
逻辑布尔(true / false)
在飞机上的矩形框
二进制数据(“字节数组”)
可变长度字符串
固定长度字符串
IPv4或IPv6网络地址
在平面上的圆
日历日期(年,月,日)
双精度浮点数(8字节)
IPv4或IPv6主机地址
带符号的四字节整数
时间跨度
在飞机上的无限线
线段在平面上
MAC(介质访问控制)地址
货币金额
可选精度的精确数值
在飞机上的几何路径
几何点在飞机上
在飞机上的闭合的几何路径
单精度浮点数(4字节)
带符号的双字节整数
自动增量四字节整数
可变长度字符串
- time [(p)] [without time zone]:
时间(无时区)
- time [(p)] with time zone:
时间,包括时区
- timestamp [(p)] [without time zone]:
日期和时间(无时区)
- timestamp [(p)] with time zone:
日期和时间,包括时区
文本搜索查询
文本搜索文档
用户级事务标识快照
通用唯一标识符
XML数据
PostgreSQL的优点
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实现复制对于缺乏数据库和系统管理经验的人来说可能更简单。
觉得文章有用就打赏一下文章作者
支付宝扫一扫打赏
微信扫一扫打赏