On Fri, 30 Jan 2015 13:17:26 -0500 Stephen Chrzanowski <pontia...@gmail.com> wrote:
> 2.1 Filesystems with broken or missing lock implementations > > SQLite depends on the underlying filesystem to do locking as the > documentation says it will. But some filesystems contain bugs in their > locking logic such that the locks do not always behave as advertised. The problem is even deeper than that. NFS does not implement Posix semantics. The actual behavior is hard to reason about and far outside SQLite's scope. On a local file system the kernel guarantees filebuffer cache coherency. If process A reads a block from the disk, and process B modifies the same block, the next time process A consults that block it will see B's changes. Note this happens whether or not locking is involved, and regardless of the state of the disk. It's a by-product of a unified buffer cache. On a network filesystem there is no unified buffer cache. Writes by B are not seen when A consults its cached block. NFS does not promise that a second read by A will reflect changes made by B. Even if all locks are implemented corrected and honored, A stands to read invalid data unless steps are taken to manage the cache, something SQLite doesn't do afaik. The subject has been discussed here before, as it turns out. The Googles returned http://sqlite.1065341.n5.nabble.com/SQLite-on-NFS-cache-coherency-td33697.html, which contains much more detail and references. DBMS implementations are always about arbitrating access to shared data. They require a single, unified view of the data. Getting that view over a remote filesystem is difficult in the best of circumstances and requires explicit measures be taken. SQLite doesn't attempt to do so, by design. (A reasonable choice IMO.) If you want multi-node access to a database over a network, there are many other options. Unsurprisingly, none of them use a network filesystem either. HTH. --jkl _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users