如何使sqlite在Windows共享驱动器上保持健壮

如何使sqlite在Windows共享驱动器上保持健壮,sqlite,Sqlite,我知道不建议在网络驱动器上使用Sqlite,原因有两个:性能和由于网络文件系统的错误实现而导致的数据损坏 尽管如此,我还是想探索使用Sqlite支持具有中央数据库的多用户应用程序的可能性。我们已经在单用户机器上支持Sqlite,并在多个数据库服务器(Oracle、PostgreSQL)上支持多用户设置。使用Sqlite进行多用户设置将方便地允许在现有的IT基础架构上使用Windows共享驱动器(SMB)进行轻量级安装 我们不太在乎业绩,所以我们愿意为避免腐败付出必要的代价。引用,第9.1节: 但

我知道不建议在网络驱动器上使用Sqlite,原因有两个:性能和由于网络文件系统的错误实现而导致的数据损坏

尽管如此,我还是想探索使用Sqlite支持具有中央数据库的多用户应用程序的可能性。我们已经在单用户机器上支持Sqlite,并在多个数据库服务器(Oracle、PostgreSQL)上支持多用户设置。使用Sqlite进行多用户设置将方便地允许在现有的IT基础架构上使用Windows共享驱动器(SMB)进行轻量级安装

我们不太在乎业绩,所以我们愿意为避免腐败付出必要的代价。引用,第9.1节:

但如果必须使用网络文件系统来存储SQLite数据库 文件,考虑使用二级锁定机制来防止 即使本机文件系统 锁定机构故障

我正在寻找实现这种机制的提示和建议,或者更一般地说,寻找通过Windows共享驱动器避免Sqlite出现问题的提示


例如,我正在考虑以下死机锁定方法:在任何(非只读)SQLite查询之前,尝试在同一共享文件夹上创建一个空文件,并将其保持打开状态,直到查询结束;正常情况下,任何其他Windows进程试图在文件仍处于打开状态时创建具有相同名称的文件都会被阻止或失败。这样行吗?还有更好的吗?

另一个建议是编写一个位于SQLite文件之上的API,并为您执行锁定。

SQLite不是数据库服务器的替代品。我知道,正如我所说,我们已经为我们的应用程序支持几种类型的数据库服务器。我们销售业务应用程序;我们的用户总是有随时可用的共享驱动器,但必须依靠他们的IT和DBA团队来创建和管理一个Oracle实例(例如,一个2-10个用户的小型安装),这对他们来说是非常昂贵的。我们只是在寻找一些更轻量级的东西来简化部署(用于测试甚至生产)。您不能打开文件进行非共享读/写吗?假设每个客户端应用程序都有自己的数据副本,因此这意味着当另一个客户端更新数据库时,它们将无法获得更新的副本。你可能会有很多等待,但如果数据库不是太大的话,它应该可以工作。