我们目前在多用户环境中使用 SQLite 遇到数据库锁定问题。由于已关闭日志记录以减少数据库锁定异常的数量,因此这些问题与常规数据库畸形问题相结合。
我的同事目前正在实施一种同步算法,以允许用户在本地 SQLite 数据库上工作,并将该数据近乎即时地传输到网络上的主数据库。
当更改本地行时,同步标志设置为真。同步算法由每秒运行的计时器触发,包括上传和下载两种方法。下面提到的任何 SQL 命令都是使用 String.Format 构建的。
在上传期间,会扫描本地数据库以查找同步标志为真的行。像这样的每一行要么被更新,要么被插入到主数据库中(取决于是否可以找到具有相同 PK 的行)。
在下载过程中,每个本地表都会逐行、逐字段地与主数据库中的相应表进行比较(两个表都作为数组结构加载到内存中以加快比较速度)。如果发现任何差异,或者缺少本地行,则使用主数据库中的数据更新/插入本地行
忽略这样一个明显的事实,即这不会解决我们的锁定/畸形问题,我的直觉告诉我这是一个糟糕的想法,但我很难向那个权力解释这个。任何人都可以提供一些理由来说明为什么这将是一个糟糕的想法,或者可能是我忽略了一些积极因素。