SQLite vs MySQL vs PostgreSQL对比总结
开发业务系统时,是绕不开RDBMS
(关系型数据库)的。
虽然现在诞生了各种NoSQL
的数据库,RDBMS
在业务系统中的严谨和优势依然无法取代。
近几年大大小小的项目中,常用的三种RDBMS
(SQLite
,MySQL
,Postgres
)都有多次接触过,
一些使用心得记录如下,供大家参考。
1. SQLite
SQLite
是一个独立的、基于文件的、完全开源的RDBMS
。
它以可移植性、可靠性和强大的性能而闻名,即使在低内存环境中也能很好的发挥作用。
SQLite
被描述为“无服务器”数据库。
大多数关系数据库引擎是作为服务器进程实现的,应用程序通过进程间通信的方式与数据库服务器进行通信。
而SQLite
允许任何访问数据库的进程直接读写数据库磁盘文件。
这大大简化了SQLite
的使用,你可以像访问文件一样使用SQLite
,几乎不需要任何配置。
1.1. 优势
它的优势总结起来有3点:占用空间小;用户友好;便携式。
占用空间小:顾名思义,SQLite
库非常轻量级。它占用的空间不到600KiB
。此外,它是完全自包含的,这意味着你不必在系统上安装任何外部依赖项就可以使用SQLite
。
用户友好:SQLite
开箱即用,被描述为“零配置”数据库。而且SQLite
不作为服务器进程运行,这意味着它永远不需要停止、启动或重新启动,也不需要管理任何配置文件。
这些特性有助于简化SQLite
与应用程序集成的过程。
便携式:与其他数据库管理系统(通常将数据存储为大量单独的文件)不同,整个SQLite
数据库存储在单个文件中。
此文件可以位于目录层次结构中的任何位置,并且可以通过可移动媒体或文件传输协议共享。
1.2. 劣势
虽然轻巧好用,但是与传统数据库相比,SQLite
的劣势也很明显。
有限并发:虽然多个进程可以同时访问和查询SQLite
数据库,但在任何给定时间只有一个进程可以对数据库进行更改。
无用户管理:数据库系统通常支持用户,或具有预定义的数据库和表访问权限的托管连接。由于SQLite
直接读写普通磁盘文件,因此唯一适用的访问权限是底层操作系统的典型访问权限。
安全:使用服务器的数据库引擎比SQLite
这类无服务器数据库有更好的应用程序漏洞保护。
此外,由于服务器是单个持久进程,因此客户端-服务器的数据库可以比无服务器数据库更精确地控制数据访问,允许更细粒度的锁定和更好的并发性。
1.3. 适用的场景
SQLite
适用于以下的场景:
嵌入式应用程序:SQLite
对于需要可移植性且不需要未来扩展的应用程序来说是绝佳选择。比如单用户本地应用、移动的应用或游戏。
替代直接用文件保存的数据:如果你的应用程序用文件来保存数据,可以尝试用SQLite来替换,可以获得使用SQL
所带来的额外功能和简单性。
测试:对于许多应用程序来说,可将SQLite
用于快速运行测试的数据库,这样就不需要实际数据库操作的开销,使其成为测试的理想选择。
1.4. 不适用的场景
对于以下场景,请谨慎使用SQLite
:
处理大量数据:SQLite
虽然在技术上可以支持高达140 TB
的数据库,只要磁盘驱动器和文件系统也支持数据库的大小要求。
然而,SQLite
建议任何接近1 TB
的数据库都放在客户端-服务器的数据库上。
高写入量:SQLite
在任何给定时间只允许发生一次写入操作,这大大限制了其吞吐量。如果您的应用程序需要大量的写操作或多个并发编写器,SQLite
可能无法满足您的需求。
需要网络访问:因为SQLite
是一个无服务器数据库,它不提供对其数据的直接网络访问。
如果SQLite中的数据位于与应用程序不同的机器上,建议使用客户端-服务器的DBMS
。
2. MySQL
MySQL
是为了速度和可靠性而设计的,完全遵守标准SQL。
与使用SQLite
的应用程序不同,使用MySQL
数据库的应用程序通过单独的守护进程访问它。
由于服务器进程位于数据库和其他应用程序之间,因此可以更好地控制谁可以访问数据库。
2.1. 优势
MySQL
的优势主要有:
普及性和易用性:作为世界上最流行的数据库系统之一,很容易找到有MySQL
工作经验的数据库管理员。
同样,有大量关于如何安装和管理MySQL
数据库的在线文档。
还有许多第三方管理工具-比如phpMyAdmin
。
安全:MySQL
安装时附带了一个脚本,可以帮助您通过设置安装的密码安全级别、定义root用户的密码、删除匿名帐户以及删除默认情况下所有用户都可以访问的测试数据库来提高数据库的安全性。
另外,与SQLite
不同,MySQL
支持用户管理,并允许逐个用户授予不同的访问权限。
速度:MySQL开发人员优先考虑速度。虽然最近的基准测试表明,其他RDBMS
(如Postgres
)在速度方面可以匹配或至少接近MySQL
,但MySQL
仍然是一个非常快速的数据库解决方案。
复制:MySQL
支持许多不同类型的复制,这是在两个或多个主机上共享信息的做法,以帮助提高可靠性,可用性和容错性。
这有助于设置数据库备份解决方案或水平扩展数据库。
2.2. 劣势
MySQL的劣势主要有:
已知限制:由于MySQL
是为了速度和易用性而设计的,而不是完全符合SQL,因此它具有某些功能限制。
许可和专有功能:MySQL
是双重许可的软件,其中一个免费和开源社区版本在GPL v2下许可,还有几个付费商业版本在专有许可下发布。
发展缓慢:自从MySQL项目在2008年被Sun Microsystems收购,后来又在2009年被Oracle公司收购以来,用户一直抱怨DBMS的开发过程显着放缓。
2.3. 适用的场景
MySQL
适用于以下的场景:
分布式操作:MySQL
的复制支持使其成为分布式数据库设置的绝佳选择,如主次或主主架构。
各种应用程序:MySQL
为互联网上的许多网站和应用程序提供支持。
这在很大程度上要归功于安装和设置MySQL
数据库的简单性,以及从长远来看它的整体速度和可扩展性。
未来增长比较快:MySQL
的复制支持可以帮助促进水平扩展。此外,升级到商业MySQL
产品也比较简单。
2.4. 不适用的场景
以下场景,需谨慎使用MySQL
:
SQL兼容性要求高:由于MySQL
不尝试实现完整的SQL标准,因此该工具并不完全符合SQL标准。如果您的用例必须完全甚至接近完全的SQL兼容性,那么您可能希望使用更完全兼容的DBMS。
并发性和大数据量:虽然MySQL
通常在读操作方面表现良好,但并发读写可能会有问题。如果您的应用程序将有许多用户同时向其写入数据,那么像Postgres
这样的其他RDBMS
可能是更好的数据库选择。
3. Postgres
PostgreSQL
,也被称为Postgres
,自称为“最先进的开源关系数据库”,它的创建目标是高度可扩展和符合标准。
Postgres
能够同时有效地处理多个任务,它在没有读锁的情况下实现了这一点。
3.1. 优势
Postgres
的优势主要有:
SQL合规性:与SQLite
或MySQL
相比,PostgreSQL
旨在严格遵守SQL标准。
开源和社区驱动:一个完全开源的项目,PostgreSQL的源代码是由一个大型的社区开发的。Postgres
社区维护并贡献了许多描述如何使用DBMS的在线资源,包括官方文档,PostgreSQL wiki
和各种在线论坛。
可扩展性:用户可以通过编程方式扩展PostgreSQL
,并通过其目录驱动操作和动态加载的使用进行动态扩展。
3.2. 劣势
Postgres
的劣势主要有:
内存性能:对于每个新的客户端连接,PostgreSQL
都会派生一个新的进程。每个新进程都分配了大约10MB的内存,这对于具有大量连接的数据库来说可以快速增加。
因此,对于简单的读重操作,PostgreSQL
通常比其他RDBMS
(如MySQL
)性能差。
流行度:尽管近年来使用越来越广泛,但PostgreSQL
在流行度方面一直落后于MySQL
。
所以,帮助管理PostgreSQL数据库的第三方工具仍然很少。类似地,具有管理Postgres
数据库经验的数据库管理员并不多。
3.3. 适用的场景
Postgres
适用于以下的场景:
数据完整性要求高:PostgreSQL
自2001年以来一直完全符合ACID,以确保数据保持一致,使其成为数据完整性至关重要的RDBMS
的强有力选择。
与其他工具的集成:PostgreSQL
与各种编程语言和平台兼容。
如果您需要将数据库迁移到另一个操作系统或将其与特定工具集成,使用PostgreSQL
数据库可能比使用其他DBMS
更容易。
复杂操作:Postgres
可以利用多个CPU以更快的速度查询。
再加上它对多个并发编写器的强大支持,使其成为数据仓库和在线事务处理等复杂操作的绝佳选择。
3.4. 不适用的场景
以下场景,需谨慎使用Postgres
:
速度要求高:以速度为代价,PostgreSQL
在设计时考虑了可扩展性和兼容性。如果您的项目需要尽可能快的读取操作,PostgreSQL
可能不是最佳选择。
简单的设置:由于其庞大的功能集和对标准SQL的严格遵守,Postgres
对于简单的数据库设置来说可能是矫枉过正的。对于需要速度的读取繁重操作,MySQL通常是更实用的选择。
复杂的复制:尽管PostgreSQL
确实为复制提供了强大的支持,但它仍然是一个相对较新的特性,某些配置(如主—主架构)只能使用扩展。
复制是MySQL
上一个更成熟的功能,许多用户认为MySQL
的复制更容易实现,特别是对于那些缺乏必要的数据库和系统管理经验的用户。
SQLite vs MySQL vs PostgreSQL对比总结的更多相关文章
- SQLite vs MySQL vs PostgreSQL:关系型数据库比较
自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...
- SQLite、MySQL和PostgreSQL 三种关系数据库哪个好?
关系型数据库的使用已经有相当长的时间了.它们变得流行起来托了管理系统的福,关系模型被实现得相当的好,并且被证明是操作数据的好方法(特别是事务性强的应用). 在这篇DigitalOcean文章中,我们将 ...
- Mysql 和 Postgresql(PGSQL) 对比
Mysql 和 Postgresql(PGSQL) 对比 转载自:http://www.oschina.net/question/96003_13994 PostgreSQL与MySQL比较 MySQ ...
- 聚集索引、非聚集索引、聚集索引组织表、堆组织表、Mysql/PostgreSQL对比、联合主键/自增长、InnoDB/MyISAM(引擎方面另开一篇)
参考了多篇文章,分别记录,如下. 下面是第一篇的总结 http://www.jb51.net/article/76007.htm: 在MySQL中,InnoDB引擎表是(聚集)索引组织表(cluste ...
- Mysql 和 Postgresql 抛开性能的对比
MySQL/MariaDB的当前版本是5.7.6(MariaDB为MySQL创建者Monty Widenius创建的一个MySQL分支),PostgreSQL的版本是9.4.1. 以下几个方面对比两者 ...
- PostgreSQL和MySQL的优劣对比
在开发项目的过程中,难免要面对选择数据库的情况.总结此文章是因为在之前公司里使用的都是MYSQL 数据库,而在现在公司里,新项目中使用的是 PostgreSQL 数据库,在使用过程中,经常需要查找两种 ...
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
- 在MySQL和PostgreSQL之外,为什么阿里要研发HybridDB数据库?
http://www.infoq.com/cn/news/2016/12/MySQL-PostgreSQL-Greenplum 编者按 在大数据火遍IT界之前,大家对数据信息的挖掘通常聚焦在BI(Bu ...
- mysql sqlite3 postgresql 简明操作
安装 mysql $ sudo apt-get install mysql-server sqlite3 $ sudo apt-get install sqlite3 postgresql $ sud ...
- MySQL与PostgreSQL相比哪个更好?
网上已经有很多拿PostgreSQL与MySQL比较的文章了,这篇文章只是对一些重要的信息进行下梳理.在开始分析前,先来看下这两张图: MySQL MySQL声称自己是最流行的开源数据库.LAMP中的 ...
随机推荐
- 2018-12-26-WPF-开启-ScrollViewer-的触摸滚动
title author date CreateTime categories WPF 开启 ScrollViewer 的触摸滚动 lindexi 2018-12-26 14:24:26 +0800 ...
- shell 调试方法
shell 在 linux 系统中比较常见,简单的脚本可以看着确实没难度,但是当脚本功能复杂后,看起来就不那么流畅了,所以掌握一些调试方式还是很有必要的,这里我收集了一次常用的调试方式. shell调 ...
- C++里也有菱形运算符?
最近在翻<c++函数式编程>的时候看到有一小节在说c++14新增了"菱形运算符".我寻思c++里好像没什么运算符叫这名字啊,而且c++14新增的功能很少,我也不记得有添 ...
- gprMax项目代码分解:gprMax.py
目录 1. 引言 2. 代码分解 (1) 导入模块 (2)main()函数 (3)run_main()函数 (4)run_std_sim()函数 (5)run_benchmark_sim()函数 (6 ...
- redis aof数据持久化
AOF(Append Only File) 将我们所有的命令都记录下来,history,恢复的时候就把这个文件全部再执行一遍! 是什么 以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下 ...
- Linux中的man page指令
以Linux上的date命令为例,在控制台输入 man date,将会展示如下界面: [vbird@www ~]$ man date DATE(1) User Commands DATE(1) # 请 ...
- 密码学—Kasiski测试法Python程序
Kasiski Kasiski是辅助破解Vigenere的前提工作,Kasiski是猜测加密者使用Vigenere密码体系的密钥的长度,Kasiski只是猜测长度而已,所以说是辅助破解Vigenere ...
- OpenNESS & OpenVINO Demo 部署
目录 文章目录 目录 部署架构 部署 Edge Controller 基础配置 配置 Proxy 配置防火墙 Install necessary package Install MySQL Insta ...
- PageOffice实现文件在线安全预览——禁止编辑、下载、复制等
实际应用中,很多时候不仅需要在线编辑文件,还需要在线安全预览文件,要求不能复制.下载.另存到本地等情况.pageoffice可以实现文件在线安全预览,禁止:编辑.复制.粘贴.右键菜单.选择.下载.另存 ...
- 【U8】 生产订单下bom 提示 “遇到以0做除数错误”错误
一个虚拟件子件的子件为无换算率存货,bom中对应的换算率.辅助基本用量为0,修改为null后正常. 对应 bom_opcomponent表的 ChangeRate 换算率 AuxBaseQtyN 辅助 ...