一文带你了解三大开源关系型数据库:SQLite、MySQL和PostgreSQL

news2024/11/26 0:41:21

目录

1、概述

2、SQLite数据库

2.1、SQLite简介

2.2、SQLite优缺点

2.3、SQLite应用场景

3、MySQL数据库

3.1、MySQL简介

3.2、MySQL优缺点

3.3、MySQL应用场景

4、PostgreSQL数据库

4.1、PostgreSQL简介

4.2、PostgreSQL优势

4.3、PostgreSQL应用场景

5、在实际系统中的选择


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具从入门到精通案例集锦(专栏文章正在更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/131405795C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.html       一个完整的IT系统一般少不了数据库系统的支撑,大量的数据需要保存到数据库中。不同的数据库在使用场景和性能上,有一定的差异。IT系统需要根据运行环境、数据量的大小以及业务需求,选择合适的数据库。今天我们就来讲讲三个常用的免费开源的关系型数据库SQLite、MySQL和PostgreSQL,大概地了解一下这三个数据库的差异与应用场景。

1、概述

       数据库可以分商业数据库和免费数据库,常见的商业数据库有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数据库。

2、SQLite数据库

2.1、SQLite简介

       SQLite,是一款轻量级的关系型数据库,是一个用C语言开发库。它的设计目标是用于嵌入式系统中的,很多嵌入式产品中使用了它,它占用资源很低,可能只需要几百K的内存就够了。它支持Windows、Linux、Unix等主流的操作系统,因为它是用C语言开发的,可以和很多程序语言相结合,比如 C++、C#、PHP、Java、Python、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文件。关于如何调用SQLite库提供的API函数,可以参见之前写的文章:

轻量级数据库SQLite的API接口说明icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/123482588

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去存储数据,在增删改查时会非常方便。

3、MySQL数据库

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。

4、PostgreSQL数据库

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。

5、在实际系统中的选择

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【操作系统】聊聊不可中断进程和僵尸进程

当我们输入top命令之后 其中S代表的是当前进程的状态 R (Running 或 Runnable) 进程在CPU的就绪队列中,正在运行或者等待运行。D (Disk Sleep) 不可中断睡眠,进程正在跟硬件交互,不运行被其他进程或者中断打断。Z (Zombie) 进程已经结束&am…

NICE-SLAM——论文简析

NICE-SLAM: Neural Implicit Scalable Encoding 现有的神经隐式表征方法会产生过度平滑的场景重建,并且难以扩展到大型场景。这些局限性主要是由于其简单的全连接网络架构没有将局部信息纳入观测。NICE-SLAM通过引入分层场景表示法,纳入了多层次的局部信…

2019架构真题2020案例(四十七)

数据存储在中央仓库,处理流程独立,交互性好数据和处理耦合在一起,每次修改需要重启劣势:需要通过连接组件进行连接,性能降低优势:支持并发通过仓库连接组件访问,效率高 (8分)缓存中存储当前的热…

基于Java的考试报名系统设计与实现(亮点:可修改任意形式的考试报名,如驾校考试报名、竞赛考试报名、英语四级考试报名等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

左值、右值、左值引用和右值引用

左值、右值和左值引用,在C11之前,我们都很熟悉也都很好理解。左值(LValue)就是有名字能够寻址的对象的值类型,右值就是在内存上没有名字的数值的值类型,左值引用就是指向左值的引用。 C11引入了右值引用,从而可以去读…

奔驰与蔚来,“联姻”只是传闻?

继比亚迪与丰田,小鹏汽车与大众,零跑汽车与Stellantis陆续展开或传出合作机会之后,近日蔚来也被曝出正在与奔驰进行合作洽谈。 这意味着,在新能源尤其是智能电动时代,传统外资车企占据技术主动权(所谓的技术…

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Span

作为Text组件的子组件,用于显示行内文本的组件。无子组件 一、接口 Span(value: string | Resource) 从API version 9开始,该接口支持在ArkTS卡片中使用。 参数: 参数名 参数类型 必填 参数描述 value string | Resource 是 文本内…

主流的图像—文本的多模态技术实现方法有哪些?

大体上可划分为3类: 1)训练中间层以对齐视觉模块和语言模型。该类方法首先预训练视觉模块,将这些视觉模块与LLM冻结,然后在视觉模块与LLM之间插入可训练的中间层,构建多模态模型。接着在大规模的图像—文本对数据集上…

基于SSM的实验室考勤管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

项目总监必看:如何利用Git深度统计团队代码贡献?多语言实践教程揭秘!

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

AP5193 DC-DC降压恒流驱动器 大功率宽电压LED驱动IC

产品描述 AP5193是一款PWM工作模式,高效率、简单、内置功率MOS管,适用于4.5-100V输入的高精度降压LED恒流驱动芯片。电流2.5A。AP5193可实现线性调光和PWM调光,线性调光脚有效电压范围0.55-2.6V.AP5193 工作频率可以通过RT 外部电阻编程来设定&#xff…

ffprobe命令

查看一个音频文件,在终端命令行输入一下命令 ffprobe video/audio.m4a 可以看到audio.m4a这个文件的所有信息。 Duration:音频总时长:开始播放时间:比特率 Stream:说明是一个音频流,编码格式是aac&…

珠宝饰品商家为什么要做微信小程序开发

珠宝饰品商家为什么要做微信小程序开发? 随着互联网的发展,微信小程序作为一种新型的应用形态,正逐渐成为商家们关注的热点。对于珠宝饰品商家来说,开发微信小程序具有以下几个方面的优势: 一、获取更多流量 微信小程…

浅谈霍尔传感器在电子设备中的应用

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 0摘 要:本文介绍了霍尔传感器的原理、应用和发展情况,详细讨论了其在电子设备中的应用。霍尔传感器在电子设备中具有高精度、高灵敏度、高稳定性等特点,可以应用于磁场测量、位置检测、电流检测等多个领…

zookeeper入门篇之分布式锁

文章目录 前言非公平锁公平锁 前言 上一篇说过,zookeeper是一个类似文件系统的数据结构,每个节点都可以看做是一个文件目录,也就是说,我们所创建的节点是唯一的,那么分布式锁的原理就是基于这个来的。 代码仓库&…

196、管理 RabbitMQ 的用户

开启Rabbitmq的一些命令: 小黑窗输入: rabbitmq-plugins enable rabbitmq_management 启动控制台插件, 就是启动登录rabbitmq控制台的页面,rabbitmq_management 代表了RabbitMQ的管理界面。 rabbitmq-server 启动rabbitMQ服务器…

NoSQL Redis

NoSQL Redis 1、数据库1.1关系型数据库1.2非关系型数据库1.3关系型和非关系型区别 2、非关系型数据库应用场景3、存储结构4、redis4.1redis概述4.2Redis 优点4.3Redis为什么这么快? 5、部署redis6、redis基础操作 1、数据库 1.1关系型数据库 关系型数据库是一个结…

房地产行业如何有效进行软文推广?

对于房地产行业来说,软文营销是常见的营销方式,也有不少地产行业来找媒介盒子进行软文推广,和传统的硬广相比,软文成本更低,而且效果是持续性的,那么房地产行业如何有效进行软文推广呢?接下来就…

Stable Diffusion生成图片

画质 masterpiece,best quality,illustration,extremely detail CG unity 8k wallpaper,ultra-detailed,depth of field 杰作,最佳质量,插图,极度详细的8K壁纸,超高详细度,景深 画风 Chinese ink painting,water color…

一文弄懂 if __name__ == “__main__“:(洒洒水啦!)

本篇文章是博主在AI、无人机、强化学习等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学…