数据库文件锁定
[...]实现了以下文件锁定方法:
默认方法是FILE并使用监视程序线程来保护数据库文件。看门狗每秒读取一次锁定文件。
第二种方法是SOCKET并打开服务器套接字。套接字方法不需要每秒读取锁文件。插座 只有在只访问数据库文件时才应使用方法 一台(总是一样的)电脑。
第三种方法是FS。这将使用FileChannel.lock来使用本机文件锁定。
也可以在没有文件锁定的情况下打开数据库;在这种情况下,由应用程序来保护数据库文件。 如果不这样做,将导致数据库损坏。
从上面看,似乎无法在不同计算机之间共享远程文件系统上的数据库,而无需在编写时手动关注并发性。 然而,在高级页面中,他们添加了第五个方法file locking serialized,该方法应该允许:
此锁定模式允许打开多个连接 数据库。可以从多个进程打开连接 来自不同的电脑。写入数据库时,访问权限是 内部自动同步。
我是否认为存在矛盾?还是我误解了序列化的文件锁?
答案 0 :(得分:1)
serialized file locking was implemented as an experiment,如文档所述:“此功能相对较新。在将其用于生产时,请确保您的用例经过充分测试(如果可能,请使用自动化测试用例)。”这就是它从未被添加到常规文档中的原因。
我不建议在远程文件系统上共享数据库。与H2无关,我在NFS实现方面遇到了不好的经历。在一种情况下,文件锁定被破坏(崩溃和重启后,文件仍被锁定)。在一种情况下,由于NFS实现中的错误,并发访问被破坏(一个客户端没有看到另一个客户端所做的更改)。在多种情况下,由于网络连接不可靠,文件会不时关闭。在许多情况下,表现很糟糕。对于某些用例,例如共享办公室文件,图片或电影,所有这些都可能没问题。但对于数据库而言,这并不好。