我正在处理在本地计算机上运行带有 WAL(预写日志记录)的 SQLite 3 数据库的第 3 方应用程序,并且我希望将该数据库(只读,这是单向镜像)镜像到另一个系统。挑战在于我在一个单独的进程中运行,这似乎使事情有些复杂化。
数据库正在以正常的锁定模式创建和打开,因此从另一个进程读取它没有问题,但我试图找到现有的实现或获取一些关于从哪里开始的指针。根据其他帖子,我的理解是标准的 sqlite 更新钩子(例如sqlite3_update_hook
)不会在进程之外工作。
一个关键问题是速度,理想情况下,我希望能够在每次更新发生时立即检测到并开始传输它。这意味着大多数轮询选项都是不可能的,但即使它们是,您将如何检测最新的变化?
我看到两个看起来很有希望的文件:实际的 WAL 文件 ( foo.db-wal
) 和内存映射索引文件 ( foo.db-shm
)。我希望这两个包含我需要的信息: A. 检测数据库中何时发生更改 B. 能够仅获取自上次更新以来的增量更改。
但是指向一些现有解决方案的指针会更受欢迎...... :-)