☆─────────────────────────────────────☆
hgoldfish (老鱼) 于 (Sun Dec 15 00:57:05 2024) 提到:
sqlite3 有两种事务,一种是 delete/trucate 模式,在每次启动一个写事务时,就创建新的日志文件。在事务被提交时,复制个原始文件,写完覆盖旧文件。第二种是 WAL 模式写事务时不断地往 WAL 日志里面写入,读的时候比较麻烦。
不考虑第二种 WAL 模式。就说第一种模式。在提交事务复制原始文件的时候,sqlite3 有没有使用 btrfs 的 cow 技术加速一下?
搜了一下,好像真有人弄了个 sqlite on btrfs 的项目,但是没合并到主线。
这个优化上去,应该能提升不少性能吧?
编辑:上面提到的信息的错误的,sqlite 在事务提交的时候并不复制原始文件。
☆─────────────────────────────────────☆
JulyClyde (我的月份又来了) 于 (Mon Dec 16 19:01:30 2024) 提到:
老鱼总是研究这么高深的内容
可是感觉大部分人的经验都集中在mysql上啊
【 在 hgoldfish 的大作中提到: 】
: sqlite3 有两种事务,一种是 delete/trucate 模式,在每次启动一个写事务时,就创建新的日志文件。在事务被提交时,复制个原始文件,写完覆盖旧文件。第二种是 WAL 模式写事务时不断地往 WAL 日志里面写入,读的时候比较麻烦。
: 不考虑第二种 WAL 模式。就说第一种模式。在提交事务复制原始文件的时候,sqlite3 有没有使用 btrfs 的 cow 技术加速一下?
: 搜了一下,好像真有人弄了个 sqlite on btrfs 的项目,但是没合并到主线。
: ...................
☆─────────────────────────────────────☆
hgoldfish (老鱼) 于 (Mon Dec 16 21:49:57 2024) 提到:
这个不算高深吧。使用 sqlite 的必知必会。我看到好几次有人不懂 sqlite 的事务原理,导致插入数据时极慢。使用 sqlite 插入一批数据时必须开启事务,原因就是我前面说的 sqlite 的 journal_mode 被设置成了 delete.
现在时髦的数据库是 postgresql,不是 mysql 了。sqlite 的 SQL 语法,以及 WAL 的原理,和 postgresql 也是差不多。
【 在 JulyClyde 的大作中提到: 】
: 老鱼总是研究这么高深的内容
: 可是感觉大部分人的经验都集中在mysql上啊
☆─────────────────────────────────────☆
JulyClyde (我的月份又来了) 于 (Tue Dec 17 12:10:55 2024) 提到:
主要是sqlite本身很非主流
【 在 hgoldfish 的大作中提到: 】
: 这个不算高深吧。使用 sqlite 的必知必会。我看到好几次有人不懂 sqlite 的事务原理,导致插入数据时极慢。使用 sqlite 插入一批数据时必须开启事务,原因就是我前面说的 sqlite 的 journal_mode 被设置成了 delete.
: 现在时髦的数据库是 postgresql,不是 mysql 了。sqlite 的 SQL 语法,以及 WAL 的原理,和 postgresql 也是差不多。
☆─────────────────────────────────────☆
hgoldfish (老鱼) 于 (Tue Dec 17 12:16:25 2024) 提到:
不会啊。sqlite 是全世界使用最广泛的数据库。几乎所有的设备,手机、电脑、各种嵌入式环境里面都有 sqlite.
【 在 JulyClyde 的大作中提到: 】
: 主要是sqlite本身很非主流
☆─────────────────────────────────────☆
JulyClyde (我的月份又来了) 于 (Tue Dec 17 12:27:50 2024) 提到:
手机里那种一般不涉及多个写入相互交错的情况吧?
感觉都是单线程访问
【 在 hgoldfish 的大作中提到: 】
: 不会啊。sqlite 是全世界使用最广泛的数据库。几乎所有的设备,手机、电脑、各种嵌入式环境里面都有 sqlite.
☆─────────────────────────────────────☆
jimmycmh (Jimmy) 于 (Tue Dec 17 17:29:19 2024) 提到:
关键你都上btrfs了,有多少可能会同时上sqlite
【 在 hgoldfish 的大作中提到: 】
: sqlite3 有两种事务,一种是 delete/trucate 模式,在每次启动一个写事务时,就创建新的日志文件。在事务被提交时,复制个原始文件,写完覆盖旧文件。第二种是 WAL 模式写事务时不断地往 WAL 日志里面写入,读的时候比较麻烦。
: 不考虑第二种 WAL 模式。就说第一种模式。在提交事务复制原始文件的时候,sqlite3 有没有使用 btrfs 的 cow 技术加速一下?
: 搜了一下,好像真有人弄了个 sqlite on btrfs 的项目,但是没合并到主线。
: ...................
☆─────────────────────────────────────☆
kirbyzhou (下雪 你那边下雪了么?) 于 (Tue Dec 17 18:50:02 2024) 提到:
第一种模式下。每个写事务要把日志文件完整复制一遍?
惊呆了
【 在 hgoldfish 的大作中提到: 】
: sqlite3 有两种事务,一种是 delete/trucate 模式,在每次启动一个写事务时,就创建新的日志文件。在事务被提交时,复制个原始文件,写完覆盖旧文件。第二种是 WAL 模式写事务时不断地往 WAL 日志里面写入,读的时候比较麻烦。
: 不考虑第二种 WAL 模式。就说第一种模式。在提交事务复制原始文件的时候,sqlite3 有没有使用 btrfs 的 cow 技术加速一下?
: 搜了一下,好像真有人弄了个 sqlite on btrfs 的项目,但是没合并到主线。
: ...................
☆─────────────────────────────────────☆
nyliubing1 (刘老师) 于 (Tue Dec 17 20:57:54 2024) 提到:
有些应用想从pgsql转到sqlite,但是感觉sqlite的聚集函数不如pgsql多,未遂
☆─────────────────────────────────────☆
hgoldfish (老鱼) 于 (Tue Dec 17 23:47:33 2024) 提到:
我刚用 strace 跟了一下系统调用。看来是我理解错误。
在事务过程中都写到日志文件里面。然后在 commit 执行的时候直接写回到原始数据库里面。所以在这过程中没有复制旧文件的事情。是我理解错误了。
【 在 kirbyzhou 的大作中提到: 】
: 第一种模式下。每个写事务要把日志文件完整复制一遍?
: 惊呆了
☆─────────────────────────────────────☆
hgoldfish (老鱼) 于 (Tue Dec 17 23:52:10 2024) 提到:
我自己回复一下。刚好 kirbyzhou 提醒我提交事务的时候根本没发生复制文件这种事。是我理解错误。所以我这个想法完全没有意义。
那我就把这几个帖子合集了。
【 在 hgoldfish 的大作中提到: 】
: sqlite3 有两种事务,一种是 delete/trucate 模式,在每次启动一个写事务时,就创建新的日志文件。在事务被提交时,复制个原始文件,写完覆盖旧文件。第二种是 WAL 模式写事务时不断地往 WAL 日志里面写入,读的时候比较麻烦。
: 不考虑第二种 WAL 模式。就说第一种模式。在提交事务复制原始文件的时候,sqlite3 有没有使用 btrfs 的 cow 技术加速一下?
: 搜了一下,好像真有人弄了个 sqlite on btrfs 的项目,但是没合并到主线。
: ...................
※ 修改:·hgoldfish 于 Dec 17 23:53:13 2024 修改本文·[FROM: 117.28.152.*]
修改:hgoldfish FROM 117.28.152.*