Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite数据库已锁定-通过逐行更新/插入实时同步两个数据库_C#_Sqlite_Xpo - Fatal编程技术网

C# SQLite数据库已锁定-通过逐行更新/插入实时同步两个数据库

C# SQLite数据库已锁定-通过逐行更新/插入实时同步两个数据库,c#,sqlite,xpo,C#,Sqlite,Xpo,我们目前在多用户环境中使用SQLite时遇到数据库锁定问题。由于日志记录已被关闭以减少数据库锁定异常的数量,这些问题还伴随着常规的数据库畸形问题 我的同事目前正在实施一种同步算法,允许用户在本地SQLite数据库上工作,并将数据几乎即时传输到网络上的主数据库 更改本地行时,同步标志设置为true。同步算法由每秒运行一次的计时器触发,包括两种方法:上传和下载。下面提到的任何SQL命令都是使用String.Format生成的 上载期间,将扫描本地数据库中Sync标志为true的行。这样的每一行要么更

我们目前在多用户环境中使用SQLite时遇到数据库锁定问题。由于日志记录已被关闭以减少数据库锁定异常的数量,这些问题还伴随着常规的数据库畸形问题

我的同事目前正在实施一种同步算法,允许用户在本地SQLite数据库上工作,并将数据几乎即时传输到网络上的主数据库

更改本地行时,同步标志设置为true。同步算法由每秒运行一次的计时器触发,包括两种方法:上传和下载。下面提到的任何SQL命令都是使用String.Format生成的

上载期间,将扫描本地数据库中Sync标志为true的行。这样的每一行要么更新,要么插入到主数据库中(取决于是否可以找到具有相同PK的行)

在下载过程中,将逐行、逐字段地将每个本地表与主数据库中的相应表进行比较(两个表都作为数组结构加载到内存中,以加快比较速度)。如果发现任何差异或缺少本地行,则使用主数据库中的数据更新/插入本地行


忽略这一显而易见的事实,即这无法解决我们的锁定/畸形问题,我的直觉告诉我这是一个可怕的想法,但我很难向潜在的力量解释这一点。有谁能解释一下为什么这是一个糟糕的想法,或者我忽略了一些积极的方面。

关闭日志记录并不能减少锁定冲突的数量,它只是将锁定异常转化为保证数据库损坏

处理锁定冲突的正确方法是等待另一个连接完成更改。使用System.Data.SQLite时,可以在连接字符串中将其设置为
默认超时
,默认值为30秒(我不知道XPO使用的是什么驱动程序)。 如果这不能提供足够的并发性,那么应该切换到客户机/服务器数据库,如MySQL或PostgreSQL

同步下载是愚蠢的:您无论如何都在读取整个数据库,因此只需将整个数据库文件复制到本地计算机上就更容易、更快了



如果您认为来自的一个词可能更有可能说服您的PHB,请在。

什么文件共享协议上提问?NFS?SMB(Windows)?“日志记录”是指
journal\u mode
不是
WAL
,还是
OFF
?文件共享协议是SMB,没有日志记录是“journal\u mode=OFF”