SQLite 和PostgreSQL比功能,计算能力,应用场景,SQLite就是一个菜鸡,但是要比数量,使用的人数,适应的场景,PostgreSQL完败。我们会来找一期说说 postgreSQL在终端市场上的一些问题。
SQLite起初也是一个企业因为没有合适的线下终端数据库,而自己研发的一款数据库,目的就是嵌入式。它的起源是2004年,3.0到2025年已经发展到了3.51版本,而这些版本之间的不同和操作系统是有关系的。
为什么要搞清楚版本的问题,主要是每个sqllite的版本和操作系统之间的关系非常紧密,不同的SQLite提供的功能和能力与本身和操作系统密切相关。
https://www.sqlite.org/src/taglist
软件版本发布与操作系统版本推测表
|
Tag Name |
Most Recent Release Date (YYYY-MM-DD) |
macOS Version (Approx.) |
Windows Version (Approx.) |
Linux Kernel (Approx.) |
Ubuntu LTS (Approx.) |
Rocky Linux (Approx.) |
Android Version (Approx.) |
|
major-release |
2025-11-04 |
16 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10/11 |
15/16 |
|
version-3.51.0 |
2025-11-04 |
16 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10/11 |
15/16 |
|
version-3.42.1 |
2025-08-06 |
15 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10 |
15 |
|
version-3.44.5 |
2025-07-24 |
15 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10 |
15 |
|
version-3.50.4 |
2025-07-30 |
15 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10 |
15 |
|
version-3.50.3 |
2025-07-17 |
15 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10 |
15 |
|
version-3.50.2 |
2025-06-28 |
15 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10 |
15 |
|
version-3.50.1 |
2025-06-06 |
15 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10 |
15 |
|
version-3.50.0 |
2025-05-29 |
15 (TBD) |
11/12 |
6.x |
24.04/25.10 |
10 |
15 |
|
version-3.49.2 |
2025-05-07 |
14 (Sonoma) |
11/12 |
6.x |
24.04 (LTS) |
9/10 |
15 |
|
patch-release |
2025-02-19 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.49.1 |
2025-02-18 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.49.0 |
2025-02-06 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.48.0 |
2025-01-14 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.47.2 |
2024-12-07 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.47.1 |
2024-11-25 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.47.0 |
2024-10-21 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.46.1 |
2024-08-13 |
13 (Ventura) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.46.0 |
2024-05-23 |
13 (Ventura) |
11 |
6.x |
24.04 (LTS) |
9/10 |
14 |
|
version-3.45.3 |
2024-04-15 |
13 (Ventura) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.44.3 |
2024-04-05 |
13 (Ventura) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.45.2 |
2024-03-12 |
13 (Ventura) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.45.1 |
2024-01-30 |
13 (Ventura) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.45.0 |
2024-01-15 |
13 (Ventura) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.44.2 |
2023-11-24 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.44.1 |
2023-11-22 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.44.0 |
2023-11-01 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.43.2 |
2023-10-10 |
14 (Sonoma) |
11 |
6.x |
22.04 (LTS) |
9/10 |
14 |
|
version-3.43.1 |
2023-09-11 |
13 (Ventura) |
11 |
6.x |
22.04 (LTS) |
9/10 |
13 |
|
version-3.43.0 |
2023-08-24 |
13 (Ventura) |
11 |
6.x |
22.04 (LTS) |
9/10 |
13 |
|
version-3.42.0 |
2023-05-16 |
13 (Ventura) |
10/11 |
6.x |
22.04 (LTS) |
9/10 |
13 |
|
version-3.41.2 |
2023-03-22 |
13 (Ventura) |
10/11 |
6.x |
22.04 (LTS) |
9 |
13 |
|
version-3.41.1 |
2023-03-10 |
13 (Ventura) |
10/11 |
6.x |
22.04 (LTS) |
9 |
13 |
|
version-3.41.0 |
2023-02-21 |
13 (Ventura) |
10/11 |
6.x |
22.04 (LTS) |
9 |
13 |
|
version-3.40.1 |
2022-12-28 |
13 (Ventura) |
10/11 |
5.x/6.x |
22.04 (LTS) |
9 |
13 |
|
version-3.40.0 |
2022-11-16 |
13 (Ventura) |
10/11 |
5.x/6.x |
22.04 (LTS) |
9 |
13 |
|
version-3.39.4 |
2022-09-29 |
12 (Monterey) |
10/11 |
5.x |
22.04 (LTS) |
9 |
12 |
|
version-3.39.3 |
2022-09-05 |
12 (Monterey) |
10/11 |
5.x |
22.04 (LTS) |
9 |
12 |
|
version-3.39.2 |
2022-07-21 |
12 (Monterey) |
10/11 |
5.x |
22.04 (LTS) |
9 |
12 |
|
version-3.39.1 |
2022-07-13 |
12 (Monterey) |
10/11 |
5.x |
22.04 (LTS) |
9 |
12 |
|
version-3.39.0 |
2022-06-25 |
12 (Monterey) |
10/11 |
5.x |
22.04 (LTS) |
9 |
12 |
|
version-3.38.5 |
2022-05-06 |
12 (Monterey) |
10/11 |
5.x |
22.04 (LTS) |
9 |
12 |
|
version-3.38.4 |
2022-05-04 |
12 (Monterey) |
10/11 |
5.x |
22.04 (LTS) |
9 |
12 |
|
version-3.38.3 |
2022-04-27 |
12 (Monterey) |
10/11 |
5.x |
22.04 (LTS) |
9 |
12 |
|
version-3.38.2 |
2022-03-26 |
12 (Monterey) |
10/11 |
5.x |
20.04 (LTS) |
8/9 |
12 |
|
version-3.38.1 |
2022-03-12 |
12 (Monterey) |
10/11 |
5.x |
20.04 (LTS) |
8/9 |
12 |
|
version-3.38.0 |
2022-02-22 |
12 (Monterey) |
10/11 |
5.x |
20.04 (LTS) |
8/9 |
12 |
|
version-3.37.2 |
2022-01-06 |
12 (Monterey) |
10/11 |
5.x |
20.04 (LTS) |
8/9 |
12 |
|
version-3.37.1 |
2021-12-30 |
12 (Monterey) |
10/11 |
5.x |
20.04 (LTS) |
8/9 |
12 |
|
version-3.37.0 |
2021-11-27 |
12 (Monterey) |
10/11 |
5.x |
20.04 (LTS) |
8/9 |
12 |
|
version-3.36.0 |
2021-06-18 |
11 (Big Sur) |
10 |
5.x |
20.04 (LTS) |
8/9 |
11 |
|
version-3.35.5 |
2021-04-19 |
11 (Big Sur) |
10 |
5.x |
20.04 (LTS) |
8 |
11 |
|
version-3.35.0 |
2021-03-12 |
11 (Big Sur) |
10 |
5.x |
20.04 (LTS) |
8 |
11 |
|
version-3.34.1 |
2021-01-20 |
11 (Big Sur) |
10 |
5.x |
20.04 (LTS) |
8 |
11 |
|
version-3.34.0 |
2020-12-01 |
11 (Big Sur) |
10 |
5.x |
20.04 (LTS) |
8 |
11 |
|
version-3.33.0 |
2020-08-14 |
10.15 (Catalina) |
10 |
5.x |
20.04 (LTS) |
8 |
10 |
|
version-3.32.0 |
2020-05-22 |
10.15 (Catalina) |
10 |
5.x |
20.04 (LTS) |
8 |
10 |
|
version-3.31.0 |
2020-01-22 |
10.15 (Catalina) |
10 |
5.x |
18.04 (LTS) |
8 |
10 |
|
version-3.30.0 |
2019-10-04 |
10.14 (Mojave) |
10 |
5.x |
18.04 (LTS) |
8 |
10 |
|
version-3.29.0 |
2019-07-10 |
10.14 (Mojave) |
10 |
4.x/5.x |
18.04 (LTS) |
8 |
9 (Pie) |
|
version-3.28.0 |
2019-04-16 |
10.14 (Mojave) |
10 |
4.x/5.x |
18.04 (LTS) |
8 |
9 (Pie) |
|
version-3.27.0 |
2019-02-07 |
10.14 (Mojave) |
10 |
4.x |
18.04 (LTS) |
7/8 |
9 (Pie) |
|
version-3.26.0 |
2018-12-01 |
10.14 (Mojave) |
10 |
4.x |
18.04 (LTS) |
7/8 |
9 (Pie) |
|
version-3.25.0 |
2018-09-15 |
10.13 (High Sierra) |
10 |
4.x |
18.04 (LTS) |
7/8 |
8 (Oreo) |
|
version-3.24.0 |
2018-06-04 |
10.13 (High Sierra) |
10 |
4.x |
18.04 (LTS) |
7 |
8 (Oreo) |
|
version-3.23.0 |
2018-04-02 |
10.13 (High Sierra) |
10 |
4.x |
16.04 (LTS) |
7 |
8 (Oreo) |
|
version-3.22.0 |
2018-01-22 |
10.13 (High Sierra) |
10 |
4.x |
16.04 (LTS) |
7 |
8 (Oreo) |
|
version-3.21.0 |
2017-10-24 |
10.13 (High Sierra) |
10 |
4.x |
16.04 (LTS) |
7 |
7 (Nougat) |
|
version-3.20.0 |
2017-08-01 |
10.12 (Sierra) |
10 |
4.x |
16.04 (LTS) |
7 |
7 (Nougat) |
|
version-3.19.0 |
2017-05-22 |
10.12 (Sierra) |
10 |
4.x |
16.04 (LTS) |
7 |
7 (Nougat) |
|
version-3.18.0 |
2017-03-28 |
10.12 (Sierra) |
10 |
4.x |
16.04 (LTS) |
7 |
7 (Nougat) |
|
version-3.17.0 |
2017-02-13 |
10.12 (Sierra) |
10 |
4.x |
16.04 (LTS) |
7 |
7 (Nougat) |
|
version-3.16.0 |
2017-01-02 |
|
|
|
|
|
|
这个部分我看完也有点懵,怎么版本号低的在后面,版本号高的在前面?是的,官方文档就是这样。
|
SQLite 版本 |
主要发布时间 |
操作系统支持特性 |
说明 |
|
3.0 (2004) |
POSIX, Windows NT/2000 |
初代 B-tree 引擎 |
启动现代 SQLite 时代 |
|
3.6.x (2008) |
Linux 2.4+, Windows XP |
引入 WAL 模式 |
依赖可靠的文件锁机制 |
|
3.7.x (2010) |
Linux, macOS, Windows 7 |
WAL 默认稳定 |
支持 mmap() |
|
3.8.x (2013) |
Linux 3.x+, macOS 10.9+, Android 4+ |
Query planner 改进 |
引入 partial index、covering index |
|
3.9~3.15 (2015–2016) |
主流 Linux, macOS, Windows 10 |
支持 JSON1 扩展 |
UTF-8 全面兼容 |
|
3.24+ (2018) |
Linux 4+, Android 8+, macOS 10.13+ |
支持 UPSERT |
更好的并发性能 |
|
3.33+ (2020) |
Linux 5+, Windows 10+, iOS 14+ |
支持大于 2GB 的数据库文件 |
改进文件系统同步 |
|
3.39+ (2022) |
Linux, macOS, Android 12+ |
支持 STRICT 表模式 |
更适合现代移动端 |
|
3.45+ (2024) |
Linux 6+, macOS Sonoma, Android 14 |
JSON5, decimal precision 改进 |
最新稳定版系列 |
|
macOS 版本 |
内置 SQLite 版本 |
|
10.15 (Catalina) |
3.28 |
|
11 (Big Sur) |
3.32 |
|
12 (Monterey) |
3.35 |
|
13 (Ventura) |
3.38 |
|
14 (Sonoma) |
3.45 |
|
Android 版本 |
API Level |
内置 SQLite 版本 |
|
7 (Nougat) |
24 |
3.14 |
|
8 (Oreo) |
26 |
3.18 |
|
9 (Pie) |
28 |
3.22 |
|
10 (Q) |
29 |
3.28 |
|
11 (R) |
30 |
3.32 |
|
12 (S) |
31 |
3.35 |
|
13 (T) |
33 |
3.38 |
|
14 (U, 2024) |
34 |
3.45 |
|
iOS 版本 |
SQLite 版本 |
|
iOS 13 |
3.28 |
|
iOS 14 |
3.32 |
|
iOS 15 |
3.35 |
|
iOS 16 |
3.39 |
|
iOS 17 |
3.45 |
研究了这么一番,我目前得出的结论是,3.45这个版本会比较适合,原因也很简单。这个版本可以兼容大部分现在流行的操作系统,同时也不会特别地落后。特别新的操作系统就算了,行业的原因,这里不解释。
下一步就是安装,现在这里找到的就是LINUX下的编译安装。在编译安装时遇到一个问题,就是tcl测试环境的问题,这里的查询可以不将这个进行编译。
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
echo '
#ifndef
USE_SYSTEM_SQLITE' >tclsqlite3.c
cat sqlite3.c >>tclsqlite3.c
echo '
#endif
/* USE_SYSTEM_SQLITE */' >>tclsqlite3.c
cat /data/sqllite345/src/tclsqlite.c >>tclsqlite3.c
tclsh8.6 /data/sqllite345/tool/buildtclext.tcl --destdir "" --cc "gcc" -g -O2 -DSQLITE_OS_UNIX=1 -DSQLITE_ENABLE_MATH_FUNCTIONS
can't read "@": no such variable
while executing
"subst $cmd"
invoked from within
"if {$tcl_platform(platform)=="windows"} {
# We are only able to install, uninstall, and list on Windows.
# The build process is handled by the Mak..."
(file "/data/sqllite345/tool/buildtclext.tcl" line 69)
make: *** [Makefile:1603: tclextension-install] Error 1
编译时./configure --disable-tcl 去掉tcl测试环境,再进行make make install就可以了,版本3.45 Rocky linux 8.10。
安装完毕,我就开启了自学模式,也感谢群里的同学,我问有没有sqllite的群,然后就给我拉到QQ群了。这个同学叫“小明”。
Sqlite 架构
Sqllite 由两个部分组成,一个是主体,另一个是测试单元。在编辑的时候我们抛弃的就是测试的单元,测试单元与数据库没有必然的联系,从图中也可以看出。
下面开始快速地对一些我们感兴趣的问题进行快速的梳理,今天只是一部分,下期我们继续。
1 并发的问题,在PG上并发那不是问题,对于sqlite来说,那就是一个大问题。sqlite有两种模式,rollback-journal 和 wal模式,这个是通过命令PRAGMA journal_mode = WAL; 来控制的。
那么这两个模式有什么区别,一句话:
rollback-journal 模式会产生读和写的库锁,你没有看错,库锁。 wal 模式会产生多读 并发和多写的库锁。
2 在测试中很容易就会出现数据库的锁
测试的方法也很简单,两个SQL,然后批量进行运行。
测试分为 reader.sql writer.sql 读写的操作,然后还有一个sh 脚本来调用。
#!/bin/bash
for i in {1..50}; do
whiletrue; do
sqlite3 /data/data/test.db < /data/data/writer.sql
done &
done
# 50 并发查询
for i in {1..50}; do
whiletrue; do
sqlite3 /data/data/test.db < /data/data/reader.sql
done &
done
SELECT count(*)
FROM test_data
WHERE value > (abs(random() % 50000));
BEGIN TRANSACTION;
INSERT INTO test_data (name, value)
VALUES ('writer_' || random(), abs(random() % 100000));
COMMIT;
在测试中一开始就产生了大量的database locks:
所以我们会出一期,如何使用sqlite开发,还有一期sqllite如何进行运维和使用的文章,敬请期待吧。sqllite 是世界装机量最大的数据库,这会在我们这边也要被印证了。我们会有一期再分析一下,为什么SQLite 打败了PostgreSQL?
作者介绍
刘华阳,20年经历风霜雨打的 DBA,5年的 DBA 架构和团队管理经验,只要是数据库都喜欢学习。PostgreSQL ACE,MongoDB 狂热者,10年的 MYSQL 工作经验,现在在玩 POLARDB 与时俱进。
来源丨公众号:AustinDatabases(ID:AustinDatabases)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721