iMessage 应用程序存储位置 - 为什么 chat.db-wal 立即更新但 chat.db 需要一段时间?
iMessage app storage location - why is chat.db-wal updated instantly but chat.db takes awhile?
所以玩弄 iMessages 并思考备份它们的方法和各种事情。
我在 ~/Library/Messages 找到了他们的位置。
共有三个文件
1. chat.db
2. chat.db-wal
3. chat.db-shm
如果我 运行 在向某人发送 iMessage 时监视文件更改的节点脚本,我看到 chat.db-wal 会立即更改,但 chat.db 需要一段时间才能更新。
我想尽快收到消息,但不确定是否可以读取 .db-wal 文件。有人知道我是否可以阅读该文件吗?或者为什么 .db 文件似乎需要更长时间才能更新?
谢谢。
一切都很好。你的数据在那里。这就是 SQLite 的工作原理。
为了支持 ACID 事务,确保您的数据在崩溃或断电的情况下正确存储,SQLite 首先将您的数据写入 "write-ahead log"(*-wal
文件)。当数据库正确关闭或预写日志太满时,SQLite 将使用日志内容更新数据库文件。
SQLite 在读取时,会先查询预写日志,即使多个连接正在使用同一个数据库。日志中的数据仍然是"in the database".
作为关闭数据库的一部分,SQLite 应该将日志应用于数据库。如果没有,您可以 运行 PRAGMA wal_checkpoint;
手动检查日志文件。
由此推论:不要删除 -wal
文件,尤其是在上次使用数据库时没有完全关闭的情况下。
有关 SQLite 中预写日志记录的更多信息,请参阅 the SQLite documentation.
所以玩弄 iMessages 并思考备份它们的方法和各种事情。
我在 ~/Library/Messages 找到了他们的位置。
共有三个文件
1. chat.db
2. chat.db-wal
3. chat.db-shm
如果我 运行 在向某人发送 iMessage 时监视文件更改的节点脚本,我看到 chat.db-wal 会立即更改,但 chat.db 需要一段时间才能更新。
我想尽快收到消息,但不确定是否可以读取 .db-wal 文件。有人知道我是否可以阅读该文件吗?或者为什么 .db 文件似乎需要更长时间才能更新?
谢谢。
一切都很好。你的数据在那里。这就是 SQLite 的工作原理。
为了支持 ACID 事务,确保您的数据在崩溃或断电的情况下正确存储,SQLite 首先将您的数据写入 "write-ahead log"(*-wal
文件)。当数据库正确关闭或预写日志太满时,SQLite 将使用日志内容更新数据库文件。
SQLite 在读取时,会先查询预写日志,即使多个连接正在使用同一个数据库。日志中的数据仍然是"in the database".
作为关闭数据库的一部分,SQLite 应该将日志应用于数据库。如果没有,您可以 运行 PRAGMA wal_checkpoint;
手动检查日志文件。
由此推论:不要删除 -wal
文件,尤其是在上次使用数据库时没有完全关闭的情况下。
有关 SQLite 中预写日志记录的更多信息,请参阅 the SQLite documentation.