出于性能和可靠性的原因,我想使用WAL模式。但是我的环境没有mmap()函数,所以我不能用WAL编译SQLite(WAL需要mmap()。)。尽管设置PRAGMA locking_mode=EXCLUSIVE允许不带mmap()的情况下使用WAL(在这种情况下,WAL索引是在堆内存而不是共享文件上创建的),但对于管理多个数据库连接的应用程序来说,它不是一个好的解决方案。

我在一个进程中将SQLite与多个数据库连接(用于线程间并发)一起使用,而mmap()似乎仅用于进程间的内存共享。由于我期望有一种方法可以在单进程环境中使用不带mmap()的WAL。但是我找不到好的解决方案。有解决这个问题的想法吗?

谢谢。

最佳答案

SQLibrary中的代码始终为wal-index创建一个内存映射文件。

如果要使用不带mmap的WAL,则必须更改该代码以改为使用普通的共享内存块。

关于sqlite - SQLite:没有mmap()函数,是否可以使用WAL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23540013/

10-16 19:33