HarmonyOS 鸿蒙Next 关系型数据库文件自动生成.db-shm文件和.db-wal文件的作用及必要性

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 关系型数据库文件自动生成.db-shm文件和.db-wal文件的作用及必要性

最近研究数据管理相关的文档和api应用,发现不论键值型数据库还是关系型数据库,每次创建对应的数据库实例后都会生成三个文件:.db文件、.db-shm文件和.db-wal文件,.db文件很好理解,就是对应的数据库文件,但是同时生成的另外两个文件就不是很理解,必要性和用途是什么?

还有就是,每次对数据库实例的插入、删除、更新等操作,.db-shm文件和.db-wal文件都会更新,内存会增大,而.db文件大小不变(一直都是4kb),这是怎么回事?

cke_8291.png

有能解释清楚我疑惑的或者能找到相关文档的,欢迎一起交流。

有同样疑惑地开发者伙伴可以留言,也欢迎一起交流。


更多关于HarmonyOS 鸿蒙Next 关系型数据库文件自动生成.db-shm文件和.db-wal文件的作用及必要性的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复
SQLite数据库操作后会生成db-shmdb-wal文件,这两个文件是SQLite数据库中的共享内存文件和预写式日志文件的标识。db-shm文件用于存储临时数据和缓冲区数据,而db-wal文件用于记录数据库更改操作和保证数据的一致性。db-shmdb-wal断开数据库连接后会被删掉,而系统组件里没有断开操作,因此会一直存在。

更多关于HarmonyOS 鸿蒙Next 关系型数据库文件自动生成.db-shm文件和.db-wal文件的作用及必要性的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


断开数据库连接是指我关闭数据库或者退出应用之类的场景吗?

.db文件大小一直是4K,那新增的数据在哪里查看。通过工具查看.db文件里面没有任何内容

.db-wal文件
wal意思是write-ahead log,顾名思义就是保存的一个日志,对于提交/回滚目的很有用。 sqlite 3.7之后开始提供这个功能,当一个数据库采用WAL模式,所有连接数据的操作都必须使用WAL,然后在在数据库文件夹下生成一个后缀为.db-wal的文件保存操作日志。该日志使SQLite可以在事务失败时回滚更改。 SQLite如何使用它们以及为什么将它们保留这么长时间取决于SQLite的作者。如果数据库未在运行,则删除该文件是完全可以的,实际上,如果存在该文件,它将在重新启动数据库时自动删除(因为它仅在数据库正在主动写入/提交数据时才有用)。

.db-shm 文件
.db-shm 文件是共享内存文件,仅当SQLite以WAL(预写日志)模式运行时才存在。 这是因为在WAL模式下,共享同一个db文件的数据库连接必须全部更新同一存储位置(用作WAL文件的索引),以防止发生冲突。

参考资料:sqlite官网:https://www.sqlite.org/fileformat2.html

怎么让SQLite不要自动生成.db-shm文件和.db-wal文件?

看”楼下“我的回复,两个临时文件产生的原因,有助于你不让自动生成的处理。

怎么让SQLite不要自动生成.db-shm文件和.db-wal文件?有具体的操作吗?

在HarmonyOS鸿蒙Next中,关系型数据库文件自动生成.db-shm文件和.db-wal文件,这是SQLite数据库在WAL(Write-Ahead Logging)模式下的正常行为。

作用

  1. .db-wal文件:用于保存操作日志,当数据库采用WAL模式时,所有连接数据的操作都必须使用WAL。这个文件在数据库文件夹下生成,用于在事务失败时回滚更改,确保数据一致性。
  2. .db-shm文件:是共享内存文件,仅在SQLite以WAL模式运行时存在。它用于协调多个数据库连接对同一db文件的更新,防止数据冲突。

必要性

WAL模式旨在提高数据库的并发写入性能,并通过这些临时文件来保证数据的一致性和安全性。因此,这两个文件的生成是WAL模式正常运行的必要条件。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部