当前位置: 首页 > news >正文

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的复制更容易实现,特别是对于那些缺乏必要的数据库和系统管理经验的用户。

文章转载自:wang_yb

原文链接:https://www.cnblogs.com/wang_yb/p/18256117

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

相关文章:

SQLite vs MySQL vs PostgreSQL对比总结

开发业务系统时,是绕不开RDBMS(关系型数据库)的。虽然现在诞生了各种NoSQL的数据库,RDBMS在业务系统中的严谨和优势依然无法取代。 近几年大大小小的项目中,常用的三种RDBMS(SQLite,MySQL&#…...

一种改进解卷积算法在旋转机械故障诊断中的应用(MATLAB)

轴承振动是随机振动。在不同的时刻,轴承振动值是不尽相同的,不能用一个确定的时间函数来描述。这是由于滚动体除了有绕轴承公转运动以外,还有绕自身轴线的自旋运动,且在轴承运转时,滚动接触表面形貌是不断变化的&#…...

分布式锁(4):jedis基于Redis setnx、get、getset的分布式锁

1 实现原理 setnx(lockkey, 当前时间+过期超时时间) ,如果返回1,则获取锁成功;如果返回0则没有获取到锁,转向步骤(2)get(lockkey)获取值oldExpireTime ,并将这个value值与当前的系统时间进行比较,如果小于当前系统时间,则认为这个锁已经超时,可以允许别的请求重新获取,…...

linux内存排查工具smem使用

smem 是一个强大的工具,用于分析 Linux 系统中各进程的内存使用情况。-r 和 -k 选项用于指定输出格式和单位。以下是这两个选项的详细解析: -r:按照进程的内存使用量进行排序,默认按 RSS(常驻内存集)排序。-k:将输出的内存单位设为千字节(KB)。使用 smem 的命令示例 …...

云主机相比物理机有哪些优势

随着信息技术的飞速发展,云计算技术逐渐成为现代企业的核心驱动力。其中,云主机作为云计算的重要组成部分,以其高性能、高可用性和灵活便捷的特性,成为企业IT架构的新选择。今天我们就来了解探讨云主机相比传统主机,有…...

ClickHouse-Keeper安装使用

1.rpm 安装 clickhouse-keeper rpm -ivh clickhouse-keeper-23.8.11.28.x86_64.rpm 2.修改keeper的配置文件 vi /etc/clickhouse-keeper/keeper_config.xml修改部分参数 1.可修改日志等存储路径 2.增加监听配置 <listen_host>0.0.0.0</listen_host> 3.server_id…...

全国产飞腾+FPGA架构,支持B码+12网口+多串电力通讯管理机解决方案

GMSL 摄像头 GMSL 是 Maxim 公司推出的一种高速串行接口&#xff0c;适用于视频、音频和控制信号的传输&#xff0c;使用 50Ω 同轴电缆或 100Ω 屏蔽双绞线(STP)电缆时的距离可达 15m 或更长。 Maxim 的方案分为 GMSL、 GMSL2以及GMSL3。GMSL2 跟 GMSL(一代)是兼容的&#xff…...

bat命令 批处理 脚本 windows DOS

常见命令解释 命令示例&#xff1a; 文件1.bat echo offstart notepad.exe timeout /t 5 /nobreak start notepad.exe pause echo 当前时间【%time%】 timeout /t 5 /nobreak echo 延时时间【%time%】 pause echo off 执行bat文件的时候&#xff0c;cmd黑框里不显示批处理…...

【云计算】阿里云、腾讯云、华为云RocketMQ、Kafka、RabbitMq消息队列对比

目录 一、云平台中间件关键信息对比 1、RocketMQ 2、Kafka 3、RabbitMQ 二、中间件详细信息 1、阿里云MQ (一)消息队列RocketMQ (二)消息队列Kafka (三)消息队列RabbitMQ 2、腾讯云MQ (一)消息队列RocketMQ (二)消息队列CKafka (三)消息队列RabbitMQ 3、华为云MQ…...

【JavaScript脚本宇宙】玩转数据存储:深入剖析提升 Web 应用程序性能的六大利器

从本地到云端&#xff1a;全面解析满足各种需求的高性能 JavaScript 数据库库 前言 本文将介绍几个流行的JavaScript数据库库&#xff0c;包括localForage、Dexie.js、PouchDB、LokiJS和NeDB。每个库都有自己的特点和适用场景。通过比较它们的功能和使用方式&#xff0c;可以…...

Web应用和Tomcat的集成鉴权2-Form Authentication

作者:私语茶馆 1.相关章节 1) Web应用和Tomcat的集成鉴权1-BasicAuthentication-CSDN博客 2) Web应用和Tomcat的集成鉴权2-Form Authentication-CSDN博客 集成鉴权+定制化登录 2.前言 上章讲述了Tomcat的Basic Authentication鉴权模式,可以让Web应用和Tomcat的鉴权集成起来…...

async、await 官宣:JavaScript 中的异步编程新纪元

【作者主页】&#xff1a;小鱼神1024 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 async/await 是 ECMAScript 2017 标准中引入的一种用于处理异步操作的语法糖。它基于 Promise 和 Gen…...

日元跌破160大关,日本当局何时干预?

KlipC报道&#xff1a;6月26日&#xff0c;日元又跌了&#xff0c;美元兑日元跌破160的整关口&#xff0c;超过了4月日本官员在市场上干预的水平&#xff0c;创1986年来新低。美联储降息的可能性降低&#xff0c;市场预计日元有可能延续当前的弱势。 KlipC分析师David表示&…...

iptables(12)实际应用举例:策略路由、iptables转发、TPROXY

简介 前面的文章中我们已经介绍过iptables的基本原理,表、链的基本操作,匹配条件、扩展模块、自定义链以及网络防火墙、NAT等基本配置及原理。 这篇文章将以实际应用出发,列举一个iptables的综合配置使用案例,将我们前面所涉及到的功能集合起来,形成一个完整的配置范例。…...

phpMyAdmin 4.0.10 文件包含 -> getshell

phpMyAdmin 4.0.10 文件包含 -> getshell 前言&#xff1a;这里这个漏洞相对来说审计起来不是特别难&#xff0c;但是对于初学者还是有点挑战性的&#xff0c;从zkaq web课过来的小伙伴想挑战一下自己代码审计能力的话&#xff0c;可以直接跳到最后下载源码&#xff0c;聂风…...

Spring Boot中如何集成ElasticSearch进行全文搜索

Spring Boot中如何集成ElasticSearch进行全文搜索 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何在Spring Boot应用中集成Elas…...

HistoQC|病理切片的质量控制工具

小罗碎碎念 这期推文介绍的内容&#xff0c;我相信研究病理组学的人&#xff0c;一定都非常熟悉——HistoQC——病理切片的质量控制。 之前写过Hover Net系列的推文&#xff0c;反响还可以&#xff0c;但是Hover Net是用于细胞核检测和分类的&#xff0c;直接从这里开始还不够系…...

C/C++ - 编码规范(USNA版)

[IC210] Resources/C Programming Guide and Tips 所有提交的评分作业&#xff08;作业、项目、实验、考试&#xff09;都必须使用本风格指南。本指南的目的不是限制你的编程&#xff0c;而是为你的程序建立统一的风格格式。 * 这将有助于你调试和维护程序。 * 有助于他人&am…...

leetcode刷MySQL记录——sum/count里加条件判断、avg求满足条件记录数占比

leetcode题目&#xff1a;1934. 确认率 在刷leetcode的MySQL题中&#xff0c;从题目的题解知道了count和avg聚合函数的另外用法&#xff0c;在此记录。 count() 里加条件判断 count函数用于统计在符合搜索条件的记录中&#xff0c;指定的表达式expr不为NULL的行数有多少&…...

PHP的SHA256WithRSA签名和Curl POST请求函数

getCustomerEncryptionKey - 获取加密秘钥 /** * 获取加密秘钥 * param array $params * return string */ public function getCustomerEncryptionKey(array $params): string { //1.ASCII码&#xff08;字典序-升序&#xff09;排序…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...