您当前的位置:首页 > 电脑百科 > 数据库 > 百科

开源数据库SQLite、MySQL和PostgreSQL比较

时间:2020-09-03 10:48:16  来源:  作者:

linux是一款免费开源的操作系统,由于其自由、开放、安全、稳定等诸多特点,已被各大IT公司广泛地应用于服务器和嵌入式设备中。

由于数据存储的需要,Linux操作系统需要搭配一套性能优良的数据库才能很好的满足业务需求,但是Linux系统下可用的数据库种类繁多,功能和性能也是各有千秋,往往我们需要根据业务场景来灵活的选择要使用的数据库。

开源数据库SQLite、MySQL和PostgreSQL比较

但有时因为缺乏经验,选择了不合适的数据库,导致业务运转过程中出现了许多问题和瓶颈,比如后台系统需要进行大量且频繁的并发读写操作,但选择了MySQL,导致使用过程中出现了许多不可避免的读写错误;再比如很多嵌入式系统需要支持多用户,却选择了SQLite,虽说SQLite小巧轻便,迁移性好,很适合嵌入式系统,但是他并不支持多用户管理。所以如何选择一套适合的数据库就是我们所面临的一道难题。

当下Linux系统中常用的数据库包括两大类,一是商业型数据库,比如Oracle、Sybase、DB2、Informix、SQL Server等;二是开源免费的数据库,比如MySQL、PostgreSQL、SQLite等。商业数据库的功能与性能自不必多说,它们背后还有强大的技术团队的支持,此处我们要讲的是几种常用的开源免费数据库。本文根据我们的日常开发经验,简单的对MySQL、PostgreSQL、SQLite进行比较,给大家提供一个参考。

1、SQLite数据库

开源数据库SQLite、MySQL和PostgreSQL比较

SQLite是一款轻量级的关系型数据库,它是用C语言实现的。它是供嵌入式使用的,已广泛地应用到各个嵌入式系统中。它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

SQLite能够支持windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 C++、C#、phpJAVA等,和Mysql、PostgreSQL这两款开源的世界著名数据库管理系统相比,它的处理速度比他们都快。

(1)SQLite的优势

它的第一个特色是轻量级。SQLite的作者很看重这个特性,连它的Logo都是用的“羽毛”,来显摆它的轻飘飘。和客户端/服务器模式的数据库又说不同,SQLite是本地数据库,他是进程内的数据库引擎。使用SQLite室只需要带上它的一个动态 库,就可以享受它的全部功能,并且这个动态库的尺寸也挺小。

SQLite的另外一个特点是绿色。它的核心引擎本身不依赖第三方的软件,使用它也不需要“安装”,只需要引入动态库即可,所以在部署的时候能够省去不少麻烦。

跨平台/可移植性,如果光支持主流操作系统,那就没啥好吹嘘的了。除了主流操作系统,SQLite还支持了很多冷门的操作系统。尤其是它对很多嵌入式系统支持的非常好,比如Android、Windows Mobile、Symbin、Palm、VxWorks等。

SQLite使用的是Public Domain协议,这是最爽一种,可以放心大胆地用,毫无限制的使用。

(2)SQLite的缺点

SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错。

SQLite对SQL标准支持不全,在它的官方网站上,具体列举了不支持哪些SQL92标准。特别是不支持外键的约束.

有时候需要访问其它机器上的SQLite库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏),原因是由于某些NFS网络文件系统的文件锁在实现上是有Bug的。

(3)使用场景

一是嵌入式应用场景,所有需要迁移性,不需要扩展的应用,例如,单用户的本地应用,移动应用和游戏。

二是代替磁盘访问的场景,在很多情况下,需要频繁直接读/写磁盘文件的应用,都很适合转为使用 SQLite ,可以得益于 SQLite 使用 SQL 带来的功能性和简洁性。

2、MySQL数据库

开源数据库SQLite、MySQL和PostgreSQL比较

MySQL是最流行的关系型数据库管理系统,是最好的关系数据库管理系统应用软件之一。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL由于其体积小、速度快、免费开源,被IT公司广泛的采用。

(1)MySQL的优势

它使用的核心线程是完全多线程,速度快并支持多处理器。有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型。

它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞,支持ANSI SQL的LEFT 0UTER JOIN和ODBC。

MySQL可以工作在不同的平台上。支持C、C++、Java、Perl、PHP、Python和TCL API。

MySQL全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查询中混来自不同数据库的表。所有列都有缺省值。你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的决省值。

(2)MySQL的缺点

MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。

MySQL的另一个主要的缺陷之一是缺乏标准的RI(Referential Integrity-RI)机制;Rl限制的缺乏(在给定字段域上的一种固定的范围限制)可以通过大量的数据类型来补偿。 MySQL没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制。

(3)MySQL的使用场景

分布式操作场景:当你需要的比SQLite可以提供的更多时,把MySQL包括进你的部署栈,就像任何一个独立的数据库服务器,会带来大量的操作自由和一些先进的功能。

高安全性场景:MySQL的安全功能,用一种简单的方式为数据访问(和使用)提供了可靠的保护。

Web网站和Web应用场景:绝大多数的网站(和Web应用程序)可以忽视约束性地简单工作在MySQL上。这种灵活的和可扩展的工具是易于使用和易于管理的——这被证明非常有助于长期运行。

定制解决方案场景:如果你工作在一个高度量身定制的解决方案上,MySQL能够很容易地尾随和执行你的规则,这要感谢其丰富的配置设置和操作模式。

多用户应用场景:如果你在开发的应用需要被多用户访问,而且这些用户都用同一个数据库,那么相比 SQLite,最好还是选择一个功能完整的关系型数据库MySQL。

3、PostgreSQL数据库

开源数据库SQLite、MySQL和PostgreSQL比较

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统,以加州大学计算机系开发的POSTGRES,4.2版本为基础发展起来的对象关系型数据库管理系统。PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,PostgreSQL被广泛地应用到各大IT软件系统中。

(1)PostgreSQL的优势

PostgreSQL支持存储过程,且有众多的商业逻辑的存在,此时使用存储过程可以在较少地增加数据库服务器的负担的前提下,对这样的商业逻辑进行封装,并可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。此外存储过程的存在也避免了在网络上大量的原始的SQL语句的传输,这样的优势是显而易见的。

PostgreSQL支持视图,视图的存在可以最大限度地利用数据库服务器内在的优化机制。而且对于视图权限的合理使用,事实上可以提供行级别的权限,这是MySQL和SQLite的权限系统所无法实现的

PostgreSQL支持触发器,触发器的存在不可避免的会影响数据库运行的效率,但是与此同时,触发器的存在也有利于对商业逻辑的封装,可以减少应用程序中对同一商业逻辑的重复控制。合理地使用触发器也有利于保证数据的完整性。

PostgreSQL支持R-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据,支持ODBC。

(2)PostgreSQL的缺点

PostgreSQL运行速度明显低于MySQL和SQLite,因为MySQL使用了线程,而PostgreSQL使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。

PostgreSQL目前仍不完全适应24×7小时运行,这是因为你必须每隔一段时间运行一次VACUUM。

PostgreSQL在权限系统上也不是很完善。PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的INSERT、SELECT和UPDATE/DELETE的授权,而MySQL允许你定义一整套的不同的数据级、表级和列级的权限。

PostgreSQL生成每页的速度要比MySQL慢,PostgreSQL还欠缺一些比较高端的数据库管理系统需要的特性,比如对大对象的有效支持,以及查询缓冲等提高数据库性能的机制等。

(3)PostgreSQL的使用场景

数据完整性场景:当可靠性和数据完整性是绝对必要而无需理由时,PostgreSQL是更好的选择。

复杂的自定义过程场景:如果你需要你的数据库执行自定义过程,可扩展的PostgreSQL是更好的选择。

整合迁移场景:在将来,如果可能要把整个数据库系统迁移到另一个适当的解决方案(例如Oracle)中,PostgreSQL对于这种切换将是最兼容和易于操作的。

复杂的设计场景:相比其他的开源和免费的关系数据库管理系统实现来说,对于复杂的数据库设计,PostgreSQL提供了大部分的功能和可能性,同时并没放弃其他有价值的地方。

4、我们项目中的数据库使用情况

就我们目前工作中接触到的服务器平台而言,它需要处理大量的数据信息,需要较高的安全性,以及支持多用户并发的需求,我们采用的是MySQL数据库,而事实上也正好验证了我们的预期结果。

我们项目中常用的存储阵列,则属于嵌入式设备,对于嵌入式设备,业内常采用的就是轻量级的数据库,而且需要频繁直接读/写磁盘文件,需要进行数据迁移,但不需要扩展等因素,所以我们的阵列设备使用了采用SQLite数据库,这也正好符合上述的结论。

5、写在最后

没有最好的,只有适合的!选择一个适合的数据库会让你的工作事半功倍,而一个不适合的数据库会让你烦扰不断,问题频发。

在选择数据库之前,必须先了解清楚设备的软硬件环境,然后根据具体的业务需求和实用场景,针对不同数据库的优缺点,扬长避短,选择最合适的数据库。



Tags:开源数据库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最近学习了阿里资深技术专家李运华的架构设计关于读写分离的教程,颇有收获,总结一下。1 读写分离概述 基本架构图: 2 适用场景 读写分离不是银弹,并不是一有性能问题就上读写分...【详细内容】
2021-08-19  Tags: 开源数据库  点击:(117)  评论:(0)  加入收藏
Percona Monitoring and Management是一个用于管理和监视MySQL、MongoDB、PostgreSQL和MariaDB性能的开源平台,我们可以在自己的环境中运行该插件,以实现最大的安全性和可靠性...【详细内容】
2021-04-12  Tags: 开源数据库  点击:(163)  评论:(0)  加入收藏
物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。物联网数据的本质需要一种不同类型的数据库。以下是一些...【详细内容】
2020-11-25  Tags: 开源数据库  点击:(92)  评论:(0)  加入收藏
Linux是一款免费开源的操作系统,由于其自由、开放、安全、稳定等诸多特点,已被各大IT公司广泛地应用于服务器和嵌入式设备中。由于数据存储的需要,Linux操作系统需要搭配一套性...【详细内容】
2020-09-03  Tags: 开源数据库  点击:(85)  评论:(0)  加入收藏
如果不是领导强制要求,可能根本不会留意到这款号称世界上功能最强大的开源数据库——PostgreSQL。如果你不读这篇文章,或许也会错过一个跃跃欲试想挤进前三的优秀数...【详细内容】
2020-07-31  Tags: 开源数据库  点击:(78)  评论:(0)  加入收藏
数据库作为业务的核心,在整个基础软件栈中是非常重要的一环。近几年社区也是新的方案和思想层出不穷,接下来我将总结一下近几年一些主流的开源数据库方案,其背后的设计思想以...【详细内容】
2019-11-14  Tags: 开源数据库  点击:(85)  评论:(0)  加入收藏
概述今天主要分享一款数据库建模工具--PDMan,这是一款开源免费的数据库模型建模工具,支持Windows,Mac,Linux等操作系统,是PowerDesigner之外,更好的免费的替代方案。pdman具有颜...【详细内容】
2019-10-18  Tags: 开源数据库  点击:(1116)  评论:(0)  加入收藏
▌简易百科推荐
1增1.1【插入单行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (&#39;开心朋朋&#39;,&#39;男&#39;,&#39;1980/6/15&#3...【详细内容】
2021-12-27  快乐火车9d3    Tags:SQL   点击:(1)  评论:(0)  加入收藏
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用哪种写法,以及各种写法的优缺点,本文以一个简单的查询...【详细内容】
2021-12-23  linux上的码农    Tags:sql   点击:(9)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的HasorDB 是一个全功能数据库访问工具,提供对象映射、丰...【详细内容】
2021-12-22  GitHub精选    Tags:HasorDB   点击:(5)  评论:(0)  加入收藏
作者丨Rafal Grzegorczyk译者丨陈骏策划丨孙淑娟【51CTO.com原创稿件】您是否还在手动对数据库执行各种脚本?您是否还在浪费时间去验证数据库脚本的正确性?您是否还需要将...【详细内容】
2021-12-22    51CTO  Tags:Liquibase   点击:(3)  评论:(0)  加入收藏
场景描述:由于生产环境的表比较复杂,字段很多。这里我们做下简化,只为说明今天要聊的问题。有两张表 tab1,tab2: tab1 数据如下: tab2 数据如下: 然后给你看下,我用来统计 name=&#3...【详细内容】
2021-12-20  Bald    Tags:SQL   点击:(5)  评论:(0)  加入收藏
前言知识无底,学海无涯,知识点虽然简单,但是比较多,所以将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述1.SQL的概述Structure Query Language(结构化查...【详细内容】
2021-12-16  谣言止于独立思考    Tags:SQL基础   点击:(13)  评论:(0)  加入收藏
前言作为一名测试工程师,工作中在对测试结果进行数据比对的时候,或多或少要和数据库打交道的,要和数据库打交道,那么一些常用的 SQL 查询语法必须要掌握。最近有部分做测试小伙...【详细内容】
2021-12-14  柠檬班软件测试    Tags:SQL   点击:(15)  评论:(0)  加入收藏
话说C是面向内存的编程语言。数据要能存得进去,取得出来,且要考虑效率。不管是顺序存储还是链式存储,其寻址方式总是很重要。顺序存储是连续存储。同质结构的数组通过其索引表...【详细内容】
2021-12-08  小智雅汇    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
概述DBConvert Studio 是一款强大的跨数据库迁移和同步软件,可在不同数据库格式之间转换数据库结构和数据。它将成熟、稳定、久经考验的 DBConvert 和 DBSync 核心与改进的现...【详细内容】
2021-11-17  雪竹聊运维    Tags:数据库   点击:(26)  评论:(0)  加入收藏
一、前言 大家好,我是小诚,《从0到1-全面深刻理解MySQL系列》已经来到第四章,这一章节的主要从一条SQL执行的开始,由浅入深的解析SQL语句由客户端到服务器的完整执行流程,最...【详细内容】
2021-11-09  woaker    Tags:SQL   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条