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 公司推出的一种高速串行接口,适用于视频、音频和控制信号的传输,使用 50Ω 同轴电缆或 100Ω 屏蔽双绞线(STP)电缆时的距离可达 15m 或更长。 Maxim 的方案分为 GMSL、 GMSL2以及GMSL3。GMSL2 跟 GMSL(一代)是兼容的ÿ…...
bat命令 批处理 脚本 windows DOS
常见命令解释 命令示例: 文件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文件的时候,cmd黑框里不显示批处理…...
【云计算】阿里云、腾讯云、华为云RocketMQ、Kafka、RabbitMq消息队列对比
目录 一、云平台中间件关键信息对比 1、RocketMQ 2、Kafka 3、RabbitMQ 二、中间件详细信息 1、阿里云MQ (一)消息队列RocketMQ (二)消息队列Kafka (三)消息队列RabbitMQ 2、腾讯云MQ (一)消息队列RocketMQ (二)消息队列CKafka (三)消息队列RabbitMQ 3、华为云MQ…...
【JavaScript脚本宇宙】玩转数据存储:深入剖析提升 Web 应用程序性能的六大利器
从本地到云端:全面解析满足各种需求的高性能 JavaScript 数据库库 前言 本文将介绍几个流行的JavaScript数据库库,包括localForage、Dexie.js、PouchDB、LokiJS和NeDB。每个库都有自己的特点和适用场景。通过比较它们的功能和使用方式,可以…...
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 中的异步编程新纪元
【作者主页】:小鱼神1024 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 async/await 是 ECMAScript 2017 标准中引入的一种用于处理异步操作的语法糖。它基于 Promise 和 Gen…...
日元跌破160大关,日本当局何时干预?
KlipC报道:6月26日,日元又跌了,美元兑日元跌破160的整关口,超过了4月日本官员在市场上干预的水平,创1986年来新低。美联储降息的可能性降低,市场预计日元有可能延续当前的弱势。 KlipC分析师David表示&…...
iptables(12)实际应用举例:策略路由、iptables转发、TPROXY
简介 前面的文章中我们已经介绍过iptables的基本原理,表、链的基本操作,匹配条件、扩展模块、自定义链以及网络防火墙、NAT等基本配置及原理。 这篇文章将以实际应用出发,列举一个iptables的综合配置使用案例,将我们前面所涉及到的功能集合起来,形成一个完整的配置范例。…...
phpMyAdmin 4.0.10 文件包含 -> getshell
phpMyAdmin 4.0.10 文件包含 -> getshell 前言:这里这个漏洞相对来说审计起来不是特别难,但是对于初学者还是有点挑战性的,从zkaq web课过来的小伙伴想挑战一下自己代码审计能力的话,可以直接跳到最后下载源码,聂风…...
Spring Boot中如何集成ElasticSearch进行全文搜索
Spring Boot中如何集成ElasticSearch进行全文搜索 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何在Spring Boot应用中集成Elas…...
HistoQC|病理切片的质量控制工具
小罗碎碎念 这期推文介绍的内容,我相信研究病理组学的人,一定都非常熟悉——HistoQC——病理切片的质量控制。 之前写过Hover Net系列的推文,反响还可以,但是Hover Net是用于细胞核检测和分类的,直接从这里开始还不够系…...
C/C++ - 编码规范(USNA版)
[IC210] Resources/C Programming Guide and Tips 所有提交的评分作业(作业、项目、实验、考试)都必须使用本风格指南。本指南的目的不是限制你的编程,而是为你的程序建立统一的风格格式。 * 这将有助于你调试和维护程序。 * 有助于他人&am…...
leetcode刷MySQL记录——sum/count里加条件判断、avg求满足条件记录数占比
leetcode题目:1934. 确认率 在刷leetcode的MySQL题中,从题目的题解知道了count和avg聚合函数的另外用法,在此记录。 count() 里加条件判断 count函数用于统计在符合搜索条件的记录中,指定的表达式expr不为NULL的行数有多少&…...
PHP的SHA256WithRSA签名和Curl POST请求函数
getCustomerEncryptionKey - 获取加密秘钥 /** * 获取加密秘钥 * param array $params * return string */ public function getCustomerEncryptionKey(array $params): string { //1.ASCII码(字典序-升序)排序…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
