Linux是一款免费开源的操作系统,由于其自由、开放、安全、稳定等诸多特点,已被各大IT公司广泛地应用于服务器和嵌入式设备中。
由于数据存储的需要,Linux操作系统需要搭配一套性能优良的数据库才能很好的满足业务需求,但是Linux系统下可用的数据库种类繁多,功能和性能也是各有千秋,往往我们需要根据业务场景来灵活的选择要使用的数据库。
但有时因为缺乏经验,选择了不合适的数据库,导致业务运转过程中出现了许多问题和瓶颈,比如后台系统需要进行大量且频繁的并发读写操作,但选择了MySQL,导致使用过程中出现了许多不可避免的读写错误;再比如很多嵌入式系统需要支持多用户,却选择了SQLite,虽说SQLite小巧轻便,迁移性好,很适合嵌入式系统,但是他并不支持多用户管理。所以如何选择一套适合的数据库就是我们所面临的一道难题。
当下Linux系统中常用的数据库包括两大类,一是商业型数据库,比如Oracle、Sybase、DB2、Informix、SQL Server等;二是开源免费的数据库,比如MySQL、PostgreSQL、SQLite等。商业数据库的功能与性能自不必多说,它们背后还有强大的技术团队的支持,此处我们要讲的是几种常用的开源免费数据库。本文根据我们的日常开发经验,简单的对MySQL、PostgreSQL、SQLite进行比较,给大家提供一个参考。
1、SQLite数据库
SQLite是一款轻量级的关系型数据库,它是用C语言实现的。它是供嵌入式使用的,已广泛地应用到各个嵌入式系统中。它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
SQLite能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 C++、C#、PHP、Java等,和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数据库
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的缺点
(3)MySQL的使用场景
3、PostgreSQL数据库
PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统,以加州大学计算机系开发的POSTGRES,4.2版本为基础发展起来的对象关系型数据库管理系统。PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,PostgreSQL被广泛地应用到各大IT软件系统中。
(1)PostgreSQL的优势
(2)PostgreSQL的缺点
(3)PostgreSQL的使用场景
4、我们项目中的数据库使用情况
就我们目前工作中接触到的服务器平台而言,它需要处理大量的数据信息,需要较高的安全性,以及支持多用户并发的需求,我们采用的是MySQL数据库,而事实上也正好验证了我们的预期结果。
我们项目中常用的存储阵列,则属于嵌入式设备,对于嵌入式设备,业内常采用的就是轻量级的数据库,而且需要频繁直接读/写磁盘文件,需要进行数据迁移,但不需要扩展等因素,所以我们的阵列设备使用了采用SQLite数据库,这也正好符合上述的结论。
5、写在最后
没有最好的,只有适合的!选择一个适合的数据库会让你的工作事半功倍,而一个不适合的数据库会让你烦扰不断,问题频发。
在选择数据库之前,必须先了解清楚设备的软硬件环境,然后根据具体的业务需求和实用场景,针对不同数据库的优缺点,扬长避短,选择最合适的数据库。
mysql提供的模式匹配的其他类型是使用扩展正则表达式。 当你对这类模式进行匹配...
图片来自 Pexels 突然电话响了起来,一看是我们的一个开发同学,顿时紧张了起来...
官网连接 https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/...
1. 始终在 `v-for` 中使用 `:key` 在需要操纵数据时,将key属性与v-for指令一起...
PHP+Mysql简单实现了图书购物车 本文主要讲述如何通过PHP+HTML简单实现图书购物...
1.小程序端代码示例 my.getPhoneNumber({ success: (res) = { let encryptedData...
有许多命令行选手在linux下开发的时候会经常遇到一个问题,无论是svn还是git,提...
步骤: 1、新建一个空文件,文件名为hhhh 2、初始化 git init 3、自己要与origin...
vscode怎么浏览器打开html预览?这里大家可以通过安装open in browser插件解决。...
Java HashMap removeNode 方法 分析 源码分析仓库 https://github.com/HANXU2018...