0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SQLite、MySQL和PostgreSQL的差异与应用场景

科技绿洲 来源:网络整理 作者:网络整理 2023-11-24 15:44 次阅读

一个完整的IT系统一般少不了数据库系统的支撑,大量的数据需要保存到数据库中。不同的数据库在使用场景和性能上,有一定的差异。IT系统需要根据运行环境、数据量的大小以及业务需求,选择合适的数据库。今天我们就来讲讲三个常用的免费开源的关系型数据库SQLite、MySQL和PostgreSQL,大概地了解一下这三个数据库的差异与应用场景。

Part1 概述

数据库可以分商业数据库和免费数据库,常见的商业数据库有Microsoft SQL Server、Oracle、Sybase、DB2和Informix,普遍使用的免费数据库则有SQLite、MySQL和PostgreSQL。商业数据库的性能和功能强大全面,而且他们还有强大的技术团队支持。免费开源数据库的稳定性和性能也不逊色,有着活跃开源社区的支撑。

一些政府和银行的项目,使用商业数据库比较多,比如Microsoft SQL Server、Oracle、Sybase、DB2和Informix等。但对于大部分IT厂商,出于成本的考虑,会选用免费开源的数据库,开源的数据库也更可控。

本文我们主要来讨论一下SQLite、MySQL和PostgreSQL这三个免费开源数据库。轻量级数据库SQLite主要用于客户端和嵌入式设备中,存放一些轻量级的数据。MySQL和PostgreSQL主要用于服务端,存放一些大量或海量的数据。

此外,国内的一线大厂在数据库领域进行了深入的研究和布局,在MySQL和PostgreSQL等开源数据库的基础上进行深度优化和创新,开发出了满足他们大型业务系统海量数据存储需求的新型数据库以及应用于云计算领域的云数据库,比如腾讯的TBase数据库、阿里的OceanBase数据库以及华为的GaussDB数据库。并且这些大厂,根据自身业务系统的需求,开发出了用于不同业务场景的多种数据库。

这些大厂之所以能将自主创新的数据库玩起来,主要有以下几个原因:

  1. 他们有雄厚的资金与人才储备,可以投入大量的人力和资源去做深度的研究和布局;
  2. 他们有自家的大型业务系统(比如腾讯有微信、阿里有淘宝、华为有庞大的电信运营支撑系统,这些产品系统中深度地融入了云计算和大数据技术),为了满足自家系统的海量数据高效存储与查询需求,他们必须要在现有技术的基础上进行持续的技术创新;
  3. 新产品和技术应用到自家的大型业务系统之后,可以会遇到这样或那样的问题或瓶颈,这能持续地推动产品和技术的优化与改进。

近十年来,也诞生了很多国产数据库厂商,比如瀚高公司的瀚高数据库(基于开源的PostgreSQL数据库)、达梦公司的达梦数据库、人大金仓的Kingbase数据库。

Part2SQLite数据库

2.1 SQLite简介

SQLite,是一款轻量级的关系型数据库,是一个用C语言开发库。它的设计目标是用于嵌入式系统中的,很多嵌入式产品中使用了它,它占用资源很低,可能只需要几百K的内存就够了。它支持Windows、Linux、Unix等主流的操作系统,因为它是用C语言开发的,可以和很多程序语言相结合,比如 C++C#、PHP、JavaPython、Ruby等:

  1. C/C++:由于SQLite本身是C写的,它自带的API也是C接口的。所以C/C++用起来最直接了。假如你不喜欢面向过程的C API风格,可以另外找个C++的包装库。想重新发明轮子的同学,也可以自己包装一个;
  2. JAVA:如果要用Java访问SQLite,可以通过SQLite的JDBC驱动,或者通过专门的SQLite包装库。个人建议走JDBC方式,万一将来要换数据库,代码就不用大改;
  3. Python:pysqlite是Python操作SQLite的首选。从Python 2.5开始,它已经被整合到Python的标准库中。看来Python社区还是蛮喜欢SQLite嘛;
  4. .Net:对于喜欢dotNet的同学,可以通过SQLite的ADO.NET驱动来访问;
  5. Ruby:Ruby可以通过SQLite-Ruby操作SQLite数据库。

SQLite第一个Alpha版本诞生于2000年5月。至2023年已经接近有23个年头,SQLite也迭代到了3.0版本。不像常见的客户 - 服务器数据库范例,SQLite引擎不是一个与数据库服务器通信的独立进程,而是直接链接到程序中成为程序的一部分(可以直接将.h和.c添加到目标工程中,也可以封装成dll供目标程序调用)。

使用SQLite数据库的方式很简单,只需要将之集成到程序中,直接调用SQLite提供的API接口即可完成数据库和表的创建、数据的增删改查等操作。整个数据库(定义、表、索引和数据本身)都是存储在宿主主机上的一个或多个db文件。

2.2 SQLite优缺点

SQLite是完全免费开源的,是一种轻量级的数据,运行时占用很少的内存资源,只需要集成到程序中即可使用。支持多个操作系统,支持C、C++、Java和Python多种开发语言。SQLite支持大部分SQL语句和数据库特性。

SQLite有以下的缺点:

  1. 并发访问的锁机,SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错;
  2. SQL标准支持不全,在它的官方网站上,具体列举了不支持哪些SQL92标准。我个人感觉比较不爽的是不支持外键约束;
  3. 有时候需要访问其它机器上的SQLite库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。

2.3 SQLite应用场景

SQLite是一种轻量级的数据库,主要用于存储一些轻量级的数据,由于其占用的资源小,常常被用在嵌入式系统和移动设备中。SQLite无法处理大型系统中的海量数据,其实时性和性能不够,无法满足海量数据的高效存储及查询的需求。

可以在客户端软件中使用SQLite去存储一些数据,比如IM聊天软件中可以使用它来存放聊天数据,也可以使用它去存储一些配置信息。嵌入式设备的资源有限,需要使用数据库时,优先选择SQLite数据库。

有些数据我们可以直接将内存中的二进制数据以二进制流的方式直接写到文件中,但是这种二进制数据在增删改查时非常不方便,要重写将更新后的二进制数据重写覆盖写到文件中。使用SQLite去存储数据,在增删改查时会非常方便。

Part3MySQL数据库

3.1 MySQL简介

MySQL的第一版由瑞典公司 MySQL AB 在 1995 年发布,该公司的创始人为 David Axmark、Allan Larsson 和 Michael Widenius。MySQL 项目采用 GNU 通用公共许可 (GPL)在 2000 年作为开源发布。到 2001 年,MySQL 有超过 200 万次的有效安装;到 2004 年,该软件每天的下载超过 3 万次。

MySQL 于 2008 年被 Sun Microsystems 以10亿美元收购。当 Oracle 于 2009 年收购 Sun Microsystems 时,它也获得了 MySQL 的所有权。Oracle公司对 MySQL 软件采用了双授权政策,分为社区免费版和商业版。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言,因为其免费开源,目前是使用最广泛的开源关系数据库系统,是众多IT厂商的第一选择。

3.2 MySQL优缺点

MySQL主要有以下几点优势:

  1. 它使用的核心线程是完全多线程,速度快并支持多处理器
  2. 有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型;
  3. 它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞;
  4. 支持ANSI SQL的LEFT 0UTER JOIN和ODBC;
  5. MySQL可以工作在不同的平台上。支持C、C++、Java、Perl、PHP、Python和TCL API;
  6. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查询中混来自不同数据库的表;
  7. 所有列都有缺省值。你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的决省值。

当然MySQL也存在一些缺陷:

  1. MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变;
  2. MySQL的另一个主要的缺陷之一是缺乏标准的RI(Referential Integrity-RI)机制;Rl限制的缺乏(在给定字段域上的一种固定的范围限制)可以通过大量的数据类型来补偿;
  3. MySQL直到5.0版本才支持存储过程,对存储过程支持的并不是很好;
  4. MySQL不支持热备份,MySQL热备的问题主要与InnoDB存储引擎的特性有关。InnoDB存储引擎是MySQL默认的存储引擎,它具有ACID特性,并且支持行锁机制,在高并发的场景下可以提供良好的性能。然而,在实现热备的情况下,就会暴露InnoDB存储引擎的一些缺陷。

3.3 MySQL应用场景

MySQL用一种简单的方式为数据访问(和使用)提供了可靠的保护。大多数网站和Web应用程序,可以忽视约束性地简单工作在MySQL上。另外,如果你工作在一个需要高度定制的解决方案上,可以使用MySQL的丰富配置设置和操作模式,能够很容易地执行你的规则。如果你在开发的应用需要被多用户访问,而且这些用户都用同一个数据库,则需要选择客户 - 服务器模式数据库MySQL。

Part4PostgreSQL数据库

4.1 PostgreSQL简介

PostgreSQL是一个功能强大的开源数据库系统,它诞生于美国加州大学伯克利分校,PostgreSQL于1996年首次以开源软件的形式发布。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。

目前PostgreSQL可以运行在所有主流操作系统上,包括Linux、Unix(AIX、BSD、HP-UX、SGI IRIX、Mac OS X、Solaris和Tru64)和Windows。PostgreSQL是完全的事务安全性数据库,完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程)。它支持了大多数的SQL:2008标准的数据类型,包括整型、数值型、布尔型、字节型、字符型、日期型、时间间隔型和时间型,它也支持存储二进制的大对像,包括图片、声音和视频。PostgreSQL对很多高级开发语言有原生的编程接口,如C/C++、Java、.Net、Perl、Python、Ruby、Tcl 和ODBC以及其他语言等,也包含各种文档。

作为一种企业级数据库,PostgreSQL以它所具有的各种高级功能而自豪,像多版本并发控制(MVCC)、按时间点恢复(PITR)、表空间、异步复制、嵌套事务、在线热备、复杂查询的规划和优化以及为容错而进行的预写日志等。它支持国际字符集、多字节编码并支持使用当地语言进行排序、大小写处理和格式化等操作。它也在所能管理的大数据量和所允许的大用户量并发访问时间具有完全的高伸缩性。目前已有很多PostgreSQL的系统在实际生产环境下管理着超过4TB的数据。由于PostgreSQL的优异性能,它已赢得最终用户和业内的多次大奖,包括Linux新媒体(Linux New Media)的最佳数据库奖和5次Linux期刊编辑选出的最佳数据库奖。

最重要的一点,PostgreSQL的源代码可以自由获取,它的授权是在非常自由的开源授权下,这种授权允许用户在各种开源或是闭源项目中使用、修改和发布PostgreSQL的源代码。用户对源代码的可以按用户意愿进行任何修改、改进。 因此,PostgreSQL不仅是一个强大的企业级数据库系统,也是一个用户可以开发私用、网络和商业软件产品的数据库开发平台。

4.2 PostgreSQL优势

PostgreSQL 提供了丰富的核心功能,使其成为广泛使用的数据库解决方案。以下是几个重要的核心功能:

  • 高级查询功能:PostgreSQL 支持复杂的 SQL 查询,包括连接、子查询、聚合函数、窗口函数等。同时它还支持全文搜索、地理空间数据处理和图形数据分析等扩展功能;
  • 完整性约束:PostgreSQL 允许定义各种完整性约束,例如主键、唯一约束、外键和检查约束,以保证数据的完整性和一致性;
  • 触发器和存储过程:PostgreSQL 支持触发器和存储过程,允许在插入、更新或删除数据时执行自定义的业务逻辑;
  • 并发控制:借助多版本并发控制(MVCC)技术,PostgreSQL 实现了高度并发的读写操作,避免数据锁定和读写冲突;
  • 复制和高可用性:PostgreSQL 支持数据复制和流复制,可以创建热备份和实现高可用性架构;
  • 扩展性:通过提供扩展机制,用户可以自定义和使用各种插件和扩展,从而增强 PostgreSQL 的功能。

4.3 PostgreSQL应用场景

如果你需要你的数据库执行一些定制操作,灵活可扩展的PostgreSQL是更好的选择。如果可能要把整个数据库系统迁移到另一个数据库系统(例如Oracle)中,PostgreSQL对于这种切换将是最兼容和易于操作的。PostgreSQL是完全开源的,不受任何商业公司的控制,与受甲骨文控制的MySQL相比,PostgreSQL更加值得信赖。比如在国产化系统中,为了安全起见,会优先选择更加自主可控的PostgreSQL。

Part5在实际系统中的选择

就我们接触到的实际系统而言,需要处理大量的数据信息,需要较高的安全性,以及支持多用户并发,可以选择MySQL或PostgreSQL。在嵌入式设备和移动设备中,业内使用的都是轻量级数据库SQLite,实际运行时需要频繁直接读/写磁盘文件。在国产化的系统中,为了实现完全的自主可控,会选择完全开源且不受商业控制的PostgreSQL。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63373
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26006
  • SQlite
    +关注

    关注

    0

    文章

    78

    浏览量

    15767
  • postgresql
    +关注

    关注

    0

    文章

    19

    浏览量

    202
收藏 人收藏

    评论

    相关推荐

    Wince系统基于数据库Sqlite的应用

    PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:ATTACH
    发表于 07-18 11:31

    【OK210试用体验】sqlite3移植

    、PHP、Java等,还有ODBC接口,同样比起MysqlPostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。 1.下载sqlite3源码包(http
    发表于 09-21 16:02

    MOS管的应用场景

    mos管的应用场景,你了解么?低压MOS管可称为金属氧化物半导体场效应管,因为低压MOS管具有良好的开关特性,广泛应用在电子开关的电路中。如开关电源,电动马达、照明调光等!下面银联宝科技就跟大家一起
    发表于 11-14 09:24

    =>的使用场景有哪些

    使用场景
    发表于 10-27 13:25

    蓝牙低功耗常见的应用场景及架构

    浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构
    发表于 06-15 09:51

    uwb定位技术原理及应用场景

    说到定位我们并不陌生,定位技术一直与我们的生活密不可分,比如最常见的车辆导航。 根据使用场景,定位技术分为室内定位和室外定位。 室外定位主要依靠GPS,北斗,GLONASS,伽利略等全球卫星定位
    发表于 06-30 07:15

    ARM的技术特征是什么?应用场景有哪些?

    ARM的技术特征是什么?应用场景有哪些?
    发表于 11-05 07:32

    MS9331的应用场景是什么?

    MS9331的应用场景是什么?
    发表于 02-11 06:41

    RDS for PostgreSQL的插件的创建/删除和使用方法

    本文介绍 RDS for PostgreSQL 的插件及不同插件的创建、删除或使用方法。PostgreSQL插件简介是开源数据库中的关系型数据库,它的 PostgreSQL 确实具有基本关系型数据库
    发表于 04-25 10:30

    labview 和 wincc 的区别 使用场景

    labview 和 wincc 的区别 使用场景 都是上位机软件,都可以做监控软件 wincc的名气也比较大 对比的资料较少 写这些文章的人,从自己的从事的行业出发,带有自己的思维 使用的场景 肯定
    发表于 10-27 18:01

    PostgreSQLMySQL在技术层面的比较

    PostgreSQLMySQL / MariaDB:数据类型处理 在这里看到的是PostgreSQL错误,因为试图放入表中的数据并不符合列的数据类型,而MySQL / Maria
    发表于 09-28 13:18 0次下载
    <b class='flag-5'>PostgreSQL</b>与<b class='flag-5'>MySQL</b>在技术层面的比较

    适用于MySQLPostgreSQL环境的简便数据库开发工

    您可以通过ToadEdge实现上述优势。它是可简化开源数据库开发和管理任务的轻型可靠的桌面工具集。使用用于MySQLPostgreSQL管理的Toad可以更轻松地快速掌控新的数据库平台。
    的头像 发表于 08-31 10:05 652次阅读

    什么是Sqlite数据库?

    立。Sqlite数据库的特点是占用空间小、运行速度快、使用简单等。Sqlite数据库被广泛应用于各种移动设备、嵌入式设备和桌面应用程序中。本文将详细介绍Sqlite数据库的历史、特点、优势、使
    的头像 发表于 08-28 16:41 1533次阅读

    SQLiteMySQL区别

    MySQL时,用户要考虑很多方面的区别。 1.适用范围 SQLite比较适合在少量并发用户、轻负载的场景下使用,一般用于嵌入式系统、移动端等小规模应用;而MySQL则适合大型的、高并
    的头像 发表于 08-28 17:09 2679次阅读

    MySQL遥遥领先PostgreSQL的原因是什么

    绝大多数地区依然是 MySQL 领先,份额对比在 60:40 ~ 70:30 之间;少数几个国家如俄罗斯不分伯仲;印度的对比是 85:15;而中国则是达到了 96:4,也是 Google Trends 上差异最明显的国家。
    的头像 发表于 11-14 11:33 329次阅读
    <b class='flag-5'>MySQL</b>遥遥领先<b class='flag-5'>PostgreSQL</b>的原因是什么