首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SQLite3 打败了 PostgreSQL 终究还是没能挽回--世界最大装机量是真的

SQLite3 打败了 PostgreSQL 终究还是没能挽回--世界最大装机量是真的

作者头像
AustinDatabases
发布2025-11-14 16:14:05
发布2025-11-14 16:14:05
960
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

题目是SQLite打败了PostgreSQL,是的的确在我的这个目前的工作环境,完败。公司的PostgreSQL的实例不多10万多个实例,对你没有听错10万多。线下终端全部是PostgreSQL,不过马上就要改朝换代了,SQLlite是新的研究对象了,好了单位的机密就不能继续说了,还是说技术吧。

SQLite 和PostgreSQL比功能,计算能力,应用场景,SQLlite就是一个菜鸡,但是要比数量,使用的人数,适应的场景,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 测试环境的问题,这里查询可以将这个不进行编译。

代码语言:javascript
复制


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 架构
Sqlite 架构

Sqlite 架构

Sqllite 由两个部分组成,一个是主体,另一个是测试单元,在编辑的时候我们抛弃的也就是测试的单元,测试单元与数据库没有必然的联系,从图中也可以看出

下面开始是快速的对一些我们感兴趣的问题进行快速的梳理,今天只是一部分,下期我们继续

1 并发的问题,在PG上并发那不是问题,对于sqlite来说,按就是一个大问题,sqlite有两种模式,rollback-journal 和 wal模式,这个是通过命令PRAGMA journal_mode = WAL; 来控制的

那么这两个模式有什么区别,一句话

rollback-journal 模式会产生 读 和 写的 库锁,你没有看错,库锁。 wal 模式会产生 多读 并发,和多写的库锁。

2 在测试中很容易就会出现数据库的锁

测试的方法也很简单,两个SQL然后批量进行运行

测试分为 reader.sql writer.sql 读写的操作,然后还有一个sh 脚本,来调用

代码语言:javascript
复制


#!/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

代码语言:javascript
复制


SELECT count(*)
FROM test_data
WHERE value > (abs(random() % 50000));
代码语言:javascript
复制
BEGIN TRANSACTION;
INSERT INTO test_data (name, value)
VALUES ('writer_' || random(), abs(random() % 100000));
COMMIT;

在测试中一开始就产生了大量的database locks

数据库锁
数据库锁

数据库锁

所以,所以我们会出一期,如何使用sqlite开发,还有一期如何sqllite进行运维和使用的文章,敬请期待吧,sqllite 是世界装机量最大的数据库,这会在我们这边也要被印证了。回来我们有一期在分析一下,为什么SQLite 打败了PostgreSQL.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📅 软件版本发布与操作系统版本推测表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档