【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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 实现复制要更简单,除非你愿意花费时间、精力和资源。

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2014-04-01 02:1733096
用户头像

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

关注

评论

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

真香现场!全网首发Spring5秘籍手册+架构导图,我爱了.

冉然学Java

Spring5 技术栈 笔记 java 日志 构架

MySQL 原理与优化:Limit 查询优化

老崔说架构

6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!

阿里云数据库开源

阿里巴巴 开源 开源数据库 阿里巴巴开源开放周 阿里技术

防汛添利器,数字技术筑起抗洪“大堤”

天翼云开发者社区

云计算 大数据

暴雨天,看天翼云如何“快准稳”防涝

天翼云开发者社区

云计算 大数据 云平台

开源星「001 号」落地 FlyFish,欢迎登陆赢神秘大礼包!

云智慧AIOps社区

大前端 低代码 开源项目 数据可视化 大屏可视化

【活动报名】8月13日杭州站-开源遇上大数据

亚马逊云科技 (Amazon Web Services)

大数据 开源

Python语言基本语法元素

北极的三哈

Python 学习 开发语言

2022年中国第三方证券APP创新专题分析

易观分析

App 金融 证券

如何通过 open-local 玩转容器本地存储? | 龙蜥技术

OpenAnolis小助手

开源 云原生 分布式存储 龙蜥技术 open-local

[ Kitex 源码解读 ] Kitex 请求重试的分类及实现原理

baiyutang

Go 微服务架构 云原生 kitex CloudWeGo

九章云极DataCanvas APS机器学习平台获得中国信通院“领先级”评级

九章云极DataCanvas

人工智能 机器学习 大数据 数据分析 数据智能

SpringBatch入门

五毛

sping ETL

融云 x N 世界:构建无限用户实时交互的「元宇宙会场」

融云 RongCloud

isc 元宇宙

Python零基础入门的第一天——开发环境的搭建

北极的三哈

学习 后端 开发语言 Python.

看得见风和日丽,看不见风起“云”涌

天翼云开发者社区

云计算 大数据

开源一夏 | 使用 HTML、CSS 和 JS 制作一个中国象棋

海拥(haiyong.site)

开源 前端 8月月更

为什么我要迁移 SpringBoot 到函数计算

阿里巴巴云原生

阿里云 云原生 springboot 函数计算

现在,怎么挑选舞台租赁LED显示屏?

Dylan

LED LED显示屏

用Python自动生成 图文并茂的数据分析 报告

程序员晚枫

Python pip Office 自动化办公

6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!

阿里技术

数据库 云计算 大数据 #开源

走得通,看得见!你的交通“好帮手”

天翼云开发者社区

云计算 大数据 AI

【超级账本开发者系列】专访——肖慧 : 不忘初心,方得始终

旺链科技

区块链 技术 超级账本

视频聊天源码——一对一直播如何提高直播质量?

开源直播系统源码

软件开发 直播系统源码 开源源码 语音聊天 视频聊天源码

43%非常看好TypeScript…解读“2022前端开发者现状报告”

华为云开发者联盟

typescript 开发者 前端

uniapp电影购票选座系统源码

清风

源码 计算机毕业设计

深入理解Linux I/O系统

C++后台开发

性能优化 Linux内核 网络io C/C++后台开发 C/C++开发

玩转云端 | 天翼云电脑的百变玩法

天翼云开发者社区

云平台 云电脑

大咖说·对话生态|当Confluent遇见云:实时流动的数据更有价值

大咖说

数字化转型 Confluent 大数据应用

架构实战营第九模块作业-毕业项目

Geek_53787a

新思科技推动产业革新 为智能网联车系好“安全带”

InfoQ_434670063458

软件 车联网 新思科技

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