Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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#_Asp.net_.net_Sqlite_Rdbms - Fatal编程技术网

C# 使用SQLite进行日志记录

C# 使用SQLite进行日志记录,c#,asp.net,.net,sqlite,rdbms,C#,Asp.net,.net,Sqlite,Rdbms,我想使用SQLite作为WCF服务日志记录的数据库后端。一切看起来都很好,但如何从实际系统中提取数据库日志文件,而不锁定数据库以检查/分析日志?这个系统似乎负载非常大,每次我尝试获取数据库日志文件时,它都会被锁定。SQLite允许多个进程/应用程序打开同一个数据库文件进行读写(写入时会涉及一些锁定,但这不是典型的有大问题的情况) 您应该能够让日志记录过程将新行连续记录到数据库中,同时让卸载/提取过程将旧行复制到其他位置 但是,如果您不应该在数据库打开时使用标准复制功能将其复制为文件,因为它很可能

我想使用SQLite作为WCF服务日志记录的数据库后端。一切看起来都很好,但如何从实际系统中提取数据库日志文件,而不锁定数据库以检查/分析日志?这个系统似乎负载非常大,每次我尝试获取数据库日志文件时,它都会被锁定。

SQLite允许多个进程/应用程序打开同一个数据库文件进行读写(写入时会涉及一些锁定,但这不是典型的有大问题的情况)

您应该能够让日志记录过程将新行连续记录到数据库中,同时让卸载/提取过程将旧行复制到其他位置

但是,如果您不应该在数据库打开时使用标准复制功能将其复制为文件,因为它很可能会损坏它(在Windows上,由于严格锁定,甚至可能不可能)

相反,让卸载过程使用标准的SQLite API(或某些支持SQLite的脚本语言)连接到数据库,使用该API读取行,并在其他地方创建该数据的副本,例如在另一个SQLite数据库或大型“真实”SQL数据库(如MySQL、Postgres或MSSQL)中(或在文本文件中,如果愿意的话).

使用SQLite的API来提取数据,而不必锁定数据库。

您现在可以使用SQLite的模式来同时读取和写入SQLite数据库

使用WAL代替回滚日志有其优点和缺点。优点包括:

  • 在大多数情况下,WAL的速度要快得多
  • 沃尔玛提供更多 作为读卡器的并发性不会阻止编写器,而编写器也不会 块读取器。阅读和写作可以同时进行
  • 圆盘 使用WAL时,I/O操作趋向于更加有序
  • 沃尔使用 更少的fsync()操作,因此不易受到攻击 fsync()系统调用中断的系统上的问题

  • 请告诉我,我可以连接ot SQLite并将其复制到另一个SQLite数据库吗?