【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

SQLite vs MySQL vs PostgreSQL:关系型数据库比较

  • 2014-04-01
  • 本文字数:3730 字

    阅读完需:约 12 分钟

自 1970 年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了 40 多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛。面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景的数据库系统呢? O.S. Tezer 最近在 DigitalOcean 上发表了一篇博文,对比了SQLite、MySQL 和PostgreSQL 这三个常用的、流行的关系型数据库管理系统(RDBMS),希望能对你有所帮助。

O.S. Tezer 分别从数据库支持的数据类型、优势、劣势、何时应该使用以及何时不应该使用该数据库这 5 个方面对 SQLite、MySQL 和 PostgreSQL 做了比较。

SQLite

SQLite 是一款轻型数据库,它遵守 ACID,能够嵌入到使用它的应用程序中。作为一个自包含的、基于文件的数据库,SQLite 提供了非常出色的工具集能够处理所有类型的数据,与托管在服务器上基于进程的关系型数据库相比它的约束更少,也更易用。

当应用程序使用 SQLite 时,SQLite 并非作为一个独立进程通过某种通信协议(例如 socket)与应用程序通信,而是作为应用程序的一部分,应用程序通过调用 SQLite 的接口直接访问数据文件。感谢类库的底层技术,它让 SQLite 变得非常快速、高效并且十分强大。

SQLite 支持的数据类型

SQLite 支持的数据类型包括:NULL、INTEGER、REAL、TEXT、BLOB。

注意:如果你想了解与 SQLite 数据类型相关的更多内容,可以参阅官方文档

SQLite 的优点

  • 基于文件整个数据库完全由磁盘上的一个文件构成,这使得它的可移植性非常好。
  • 标准化尽管它看起来像一个“简化版”的数据库实现,但是 SQLite 确实支持 SQL。它省略了一些功能(RIGHT OUTER JOIN 和 FOR EACH STATEMENT),但同时也增加了一些额外的功能。
  • 非常适合开发甚至是测试在大多数应用程序的开发阶段,大部分开发人员可能都非常需要一个能够支持并发扩展的解决方案。SQLite 包含丰富的功能,所能提供的特性超乎开发所需,使用起来也非常简洁——只需要一个文件和一个 C 链接库。

SQLite 的缺点

  • 没有用户管理高级数据库都支持用户系统,例如管理连接对数据库和表的访问权限。鉴于 SQLite 的目的和性质(没有多客户端并发的高层设计),它并不包含这些功能。
  • 缺少通过优化获得额外性能的空间还是由于设计方面的原因,无法通过优化 SQLite 获得大量的额外性能。这个类库非常容易调整、也非常容易使用。它并不复杂,所以从技术上无法让它变得更快,因为它已经很快了。

何时应该使用 SQLite

  • 嵌入式应用程序所有需要可移植性、不需要扩展的应用程序,例如单用户的本地应用、移动应用或者游戏。
  • 替代磁盘访问在很多情况下,需要直接读写磁盘文件的应用程序可以切换到 SQLite 从而受益于 SQLite 提供的额外功能以及使用结构化查询语言(SQL)所带来的简便性。
  • 测试对大部分应用程序而言没必要使用额外的进程测试业务逻辑(例如应用程序的主要目标:功能)。

何时不应该使用 SQLite

  • 多用户应用程序如果有多个客户端需要访问并使用同一个数据库,那么最好使用功能完整的关系型数据库(例如 MySQL),而不是选择 SQLite。
  • 需要高写入量的应用程序写操作是 SQLite 的一个局限。该 DBMS 在同一时刻仅允许一个写操作,因而也限制了其吞吐量。

MySQL

MySQL 是最受欢迎的一个大规模数据库服务器。它是一款功能丰富的开源产品,许多网站和在线应用程序都使用该数据库。MySQL 的入门相对比较简单,开发者可以从 Internet 上获取到大量与该数据库相关的信息。

注意:鉴于该产品的受欢迎程度,使用该数据库可以让我们受益于大量第三方应用程序、工具以及集成类库。

尽管 MySQL 并没有尝试实现完整的 SQL 标准,但是它依然为用户提供了大量功能。作为一个独立的数据库服务器,应用程序需要与 MySQL 守护进程通信才能访问数据库——不同于 SQLite。

MySQL 支持的数据类型

MySQL 支持的数据类型包括 TINYINT、SMALLINT、MEDIUMINT、INT 或 INTEGER、BIGINT、FLOAT、DOUBLE、DOUBLE PRECISION、REAL、DECIMAL、NUMERIC、DATE、DATETIME、TIMESTAMP、TIME、YEAR、CHAR、VARCHAR、TINYBLOB, TINYTEXT、BLOB, TEXT、MEDIUMBLOB、MEDIUMTEXT、LONGBLOB, LONGTEXT、ENUM、SET。

MySQL 的优点

  • 易用很容易安装。第三方工具,包括可视化工具,让用户能够很容易入门。
  • 功能丰富MySQL 支持关系型数据库应该有的大部分功能——或者直接支持、或者间接支持。
  • 安全支持很多安全特性,有些非常高级,并且是内置于 MySQL 中。
  • 可扩展也非常强大MySQL 能够处理大量数据,并且在需要的时候可以规模化使用。
  • 快速放弃某些标准让 MySQL 能够非常高效、简捷地工作,因而速度更快。

MySQL 的缺点

  • 已知限制MySQL 从一开始就没有打算做所有事情,因而它在功能方面有一定的局限性,并不能满足一些先进应用程序的要求。
  • 可靠性问题MySQL 对某些功能(例如引用、事务、审计等)的实现方式使得它与其他的关系型数据库相比缺少了一些可靠性。
  • 开发停滞尽管 MySQL 依然是一款开源产品,但是自从它被收购之后人们就对其开发进展有很多抱怨。需要注意的是有一些基于 MySQL 的、完整集成的数据库在标准的 MySQL 之上附加了其他价值,例如 MariaDB。

何时应该使用 MySQL

  • 分布式操作如果 SQLite 不能满足你的需求,那么将 MySQL 引入到开发栈中,就像任何其他独立的数据库服务器一样,它能够给你带来大量的操作自由度以及一些先进的功能。
  • 高安全性MySQL 的安全机制通过一种简单的方式为数据的访问和使用提供了可靠的保护。
  • 网站和Web应用尽管有一些约束,但是绝大部分网站和 Web 应用都可以简单地运行在 MySQL 上。相关的灵活可扩展的工具非常易于使用和管理——事实证明这些工具在长期运行时非常有用。
  • 定制解决方案MySQL 有丰富的配置项和运行模式,如果你需要一个高度量身定制的解决方案,那么 MySQL 能够非常容易地尾随并执行你的规则。

何时不应该使用 MySQL

  • SQL**** 遵从性因为 MySQL 并没有打算实现完整的 SQL 标准,所以它并不完全符合 SQL。如果你可能需要与这样的关系型数据库集成,那么从 MySQL 切换过去可能并不容易。
  • 并发性尽管 MySQL 和一些其他的存储引擎能够非常好地执行读操作,但是并发读写可能会有问题。
  • 缺少功能MySQL 缺少某些功能,例如全文本搜索。

PostgreSQL

PostgreSQL 是一款先进的、开源的对象关系型数据库管理系统,它的主要目标是遵从标准和可扩展。PostgreSQL,或者说 Postgres,试图将 ANSI/ISO SQL 标准及其修正结合起来。

与其他关系型数据库相比,PostgreSQL 独特的地方是它支持高度需要的、完整的面向对象以及关系型数据库的功能,例如完全支持可靠性事务。

由于其强大的底层技术,PostgreSQL 能够非常高效地处理很多任务。得益于多版本并发控制(MVCC),它能够在没有读锁的情况下实现并发并保证 ACID。

PostgreSQL 是高度可编程的,因此扩展性非常好,它支持称为“存储过程”的自定义程序。用户可以创建这种函数简化重复的、复杂的以及经常需要的数据库操作的执行。

尽管该数据库非常强大,但是它却没有像 MySQL 那么流行,即便如此依然有很多优秀的第三方工具和类库可以让我们更容易地使用它。

PostgreSQL 支持的数据类型

PostgreSQL 支持的数据类型包括:bigint、bigserial、bit [(n)]、bit varying [(n)]、boolean、box、bytea、character varying [(n)]、character [(n)]、cidr、circle、date、double precision、inet、integer、interval [fields] [§]、line、lseg、macaddr、money、numeric [(p,s)]、path、point、polygon、real、smallint、serial、text、time、timestamp、tsquery、tsvector、txid_snapshot、uuid、xml

PostgreSQL 的优点

  • 开源且遵从SQL标准PostgreSQL 是一款开源的、免费的、功能非常强大的关系型数据库。
  • 强大的社区由一个忠实的、经验丰富的社区支持,用户可以通过知识库和 Q&A 网站获得全天候的免费服务。
  • 强有力的第三方支持除了非常先进的特性之外,PostgreSQL 还有很多优秀的、开源的第三方工具可以辅助系统的设计、管理和使用。
  • 可扩展可以通过存储过程扩展 PostgreSQL 的功能。
  • 面向对象PostgreSQL 不仅是一个关系型数据库,它还是一个面向对象的数据库——支持嵌套等功能。

PostgreSQL 的缺点

  • 性能:对于简单繁重的读取操作,使用 PostgreSQL 可能有点小题大做,同时性能也比 MySQL 这样的同类产品要差。
  • 流行程度尽管有大量的部署,但是鉴于该数据库的性质,它的受欢迎程序并不高。
  • 托管由于上面提到的几点,很难找到提供托管 PostgreSQL 实例的主机或者服务提供商。

何时应该使用 PostgreSQL

  • 数据完整性当绝对需要可靠性和数据完整性的时候,PostgreSQL 是更好的选择。
  • 复杂的定制程序如果需要数据库执行定制程序,那么可扩展的 PostgreSQL 是更好的选择。
  • 集成:如果将来可能需要将整个数据库迁移到其他合适的解决方案上(例如 Oracle),那么 PostgreSQL 可能兼容性最好也更容易切换。
  • 复杂的设计与其他开源且免费的数据库相比,对于复杂的数据库设计 PostgreSQL 在功能方面最全面,潜力最大,不需要你放弃其他有价值的资产。

何时不应该使用 PostgreSQL

  • 速度如果你只需要快速读取操作,那么 PostgreSQL 并不合适。
  • 简单除非你需要绝对的数据完整性,ACID 遵从性或者设计复杂,否则 PostgreSQL 对于简单的场景而言有点多余。
  • 复制对于缺少数据库和系统管理经验的人而言使用 MySQL 实现复制要更简单,除非你愿意花费时间、精力和资源。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2014-04-01 02:1733116
用户头像

发布了 321 篇内容, 共 115.9 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

有关TCP协议,这是我看过讲的最清楚的一篇文章了!

三十而立

KubeVela:云原生应用和平台工程之路

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

华为云开源项目OpenTiny的TinyCLI是什么时候开源的?

英勇无比的消炎药

前端 开源项目 cli UI组件库

华为云助力制造业高效实现数字化转型

科技怪授

华为云助力制造业解决数字化转型困局:高效上云,加速创新

科技怪授

IoTDB Raft协议核心研发宋子阳成为Ratis Committer:分布式IoTDB深度并创新运用Raft协议保障高可用

Apache IoTDB

IoTDB Apache IoTDB

前端技术培训学习哪个机构靠谱?

小谷哥

不想做架构师的Gopher不是好程序员

王中阳Go

Docker 高效工作 学习方法 面试题 Go 语言

MobTech MobPush|推送的下发逻辑是什么样的

MobTech袤博科技

“PMC零距离” 赖晖:在 IoTDB 我实现了参与贡献共识协议的兴趣方向!

Apache IoTDB

IoTDB Apache IoTDB

如何过好4000周:关于重新校准人生时间的建议

宇宙之一粟

时间管理

狂刷《Java 权威面试指南(阿里版)》,冲击“金三银四”有望了

三十而立

阿里巴巴内网 Java 面试 2000 题解析(2023 最新版

三十而立

技术实力与社区贡献的双重认可!乔嘉林成为 Apache 软件基金会 Member

Apache IoTDB

IoTDB Apache IoTDB

2023年最强手机远程控制横测:ToDesk、向日葵、Airdroid三款APP免Root版本

陈橘又青

远程连接

软件测试/测试开发丨如何开始webView 性能测试

测试人

软件测试 性能测试 自动化测试 测试开发

Go 语言读取文件的几种方式

宇宙之一粟

Go 语言

ChatGPT-5到底有多强?Battle!咱貌似也不输呀!

加入高科技仿生人

人工智能 AI 低代码 ChatGPT GPT-4

华为云推出场景化解决方案帮助制造企业加速数字化转型

科技怪授

制造企业如何解决数据分散和管理困难的问题,实现数字化转型?

IT科技苏辞

[翻译]反生产力宣言

宇宙之一粟

人生 时间管理 高效能

面试造火箭?GitHub 飙升“2023(Java 岗)面试真题汇总”转载 40 万

三十而立

借力函数计算 FC,HEROZ 打造专业级 AI 日本将棋服务

阿里巴巴云原生

阿里云 云原生 函数计算

阿里正式加入ChatGPT战局,“通义千问”上线后表现如何?

引迈信息

AI 阿里 低代码 语言模型 ChatGPT

一站式开发平台 加速企业数字化发展

力软低代码开发平台

【亲测有效】30 岁测试工程师的 12 个破除内卷技能!

禅道项目管理

职场 互联网人 敏捷测试 测试工程师

前端线下面授培训机构该怎么选择

小谷哥

华为云发布多项场景化解决方案助力制造业企业加速上云

IT科技苏辞

读懂一个项目的研发效能 之 项目人效

思码逸研发效能

研发效能 功能更新

联想超融合加入龙蜥社区,多产品完成与 Anolis OS 适配

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙腾计划 联想超融合

Excelize 发布 2.7.1 版本,Go 语言 Excel 文档基础库

xuri

开源 编程 Excel Go 语言 Excelize

SQLite vs MySQL vs PostgreSQL:关系型数据库比较_数据库_孙镜涛_InfoQ精选文章