iMessage应用程序存储位置 - 为什么chat.db-wal会立即更新,但chat.db需要一段时间?

时间:2016-11-23 15:44:35

标签: macos sqlite imessage

所以玩iMessages并思考如何支持它们以及各种各样的事情。

我在〜/ Library / Messages找到了他们的位置。

有三个文件

1. chat.db
2. chat.db-wal
3. chat.db-shm

如果我在向某人发送iMessage时运行一个监视文件更改的节点脚本,我看到chat.db-wal会立即更改,但chat.db需要一段时间才能更新。

我想尽快收到消息,但我不确定我是否可以阅读.db-wal文件。任何人都知道我是否可以阅读该文件?或者为什么.db文件似乎需要更长时间来更新?

感谢。

1 个答案:

答案 0 :(得分:2)

一切都很好。你的数据就在那里。这就是SQLite的工作原理。

为了支持ACID事务,在崩溃或断电的情况下保证数据正确存储,SQLite首先将您的数据写入“预写日志”(*-wal文件)。当数据库正确关闭或预写日志过满时,SQLite将使用日志内容更新数据库文件。

SQLite在阅读时,即使多个连接使用相同的数据库,也会首先查阅预写日志。日志中的数据仍然“在数据库中”。

SQLite应该在关闭数据库时将日志应用于数据库。如果没有,您可以运行PRAGMA wal_checkpoint;手动检查日志文件。

推论:不删除-wal文件,特别是如果您上次使用它时没有干净地关闭数据库。

有关SQLite中预写日志记录的更多信息,请参阅the SQLite documentation.