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中的 ...
随机推荐
- dotnet 理解 IConfigurationProvider 的 GetChildKeys 方法用途
我最近遇到了一个有趣的 Bug 让我调试了半天,这个 Bug 的现象是我的好多个模块都因为读取不到配置信息而炸掉,开始我没有定位到具体的问题,以为是我的配置服务器挂掉了.经过了半天的调试,才找到了是我 ...
- Pod入门知识(4)
一.Pod是什么? 官方文档:https://kubernetes.io/docs/concepts/workloads/pods/ Pod 是 Kubernetes 中的最小调度单元,k8s 是通过 ...
- postman使用中问题汇总
当用postman来通过接口造数据时,读取参数化文件中身份证字段的值读取错误. 参数文件如下 选择参数文件后预览的数据如下 身份证号码全部变成了0000结尾的 解决方案: 需要将身份证号码用引号引起来 ...
- XOps笔记
当前是 Ops盛行的时代,在互联网圈内的你一定经常都会听到这些名词,DevOps.DevSecOps.GitOps.NetOps.ItOps.Aiops.DataOps.MLOps.NoOps:无论是 ...
- csapp-bomblab(自信满满版)
反汇编bomb文件 要查看机器代码文件的内容,有一类称为反汇编器(disassembler,assembler是汇编程序,dis-加在某些词语前表示相反的意思)的程序非常有用.这些程序根据机器代码产生 ...
- 海康威视web插件安装后,谷歌浏览器还是不能看视频问题
首先要根据弹出的信息提示,下载并安装视频播放插件, 安装完成后重新打开谷歌浏览器,重新登录系统,如果还是不能看视频,请按下面的方法设置: 步骤1:谷歌浏览器,地址栏中输入:chrome://flags ...
- 【C# mvc5】使用mvc5 +bootstrap+EF6搭建一个权限管理系统的心得体会
使用mvc5的体会,是 业务代码都可以独立分层,比如搭配多层架构,通过controller控制器传递需要渲染的列表,按钮.接受前端返回的实体模型等.总之我觉得要在前端渲染的数据可以写在controll ...
- 基于深度学习的入侵检测系统综述文献概述——AI科研之路
1.研究方向的背景是什么? (1)互联网发展迅速,网络安全态势严重 (2)现在的入侵检测准确率不够高,不能适应现在的需求 2.前人做了哪方面的工作获得了什么成果? 近代: 将网络作为入侵来源之后发展( ...
- json 编码后导致数字变为科学计数,从而导致解码后签名与编码前签名不正确的解决办法。
docoder := json.NewDecoder(strings.NewReader(string(originData))) docoder.UseNumber() _ = docoder.De ...
- 一款功能强大的Python工具,一键打包神器,一次编写、多平台运行!
1.项目介绍 Briefcase是一个功能强大的工具,主要用于将Python项目转化为多种平台的独立本地应用.它支持多种安装格式,使得Python项目能够轻松打包并部署到不同的操作系统和设备上,如ma ...