SQLite& C#]如何控制编辑db文件的人数?

时间:2010-08-11 22:45:28

标签: c# algorithm sqlite synchronization

我正在使用SQLite编写一个简单的客户信息管理软件。

一个exe文件,一个db文件,一些dll文件。 - 就是这样:)

2~4人可能会同时运行此exe文件并访问数据库。

不仅仅是阅读,而且他们也会经常进行编辑。

是的,现在这里出现了最着名的问题之一......“同步”

我试图在有人尝试时创建/删除临时空文件 编辑它。 (这是访问数据库的“密钥”。)

但必须有更好的方法:(

防止此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

好吧,SQLite已经为每次使用锁定了数据库文件, idea 是多个应用程序可以共享同一个数据库。

但是,SQLite 明确的文档警告通过网络使用它:

  

SQLite将在网络上运行   文件系统,但由于延迟   与大多数网络相关联   文件系统,性能不会   大。另外,文件锁定逻辑   许多网络文件系统   实现包含错误(两者都有   Unix和Windows)。如果文件锁定   它可能不会像它应该的那样工作   可以为两个或更多客户   程序修改相同的部分   同一个数据库,   导致数据库损坏。   因为这个问题是由bug引起的   在底层文件系统中   实施,没有什么   SQLite可以做到这一点。

     

一个好的经验法则是你   应该避免使用SQLite   数据库相同的情况   将同时访问   网络上的许多计算机   文件系统。

假设您的“2-4人”在不同的计算机上,使用网络文件共享,我建议您不要使用SQLite。使用传统的客户端/服务器RDBMS,它是设计的,用于来自多个主机的多个并发连接。

你的应用程序仍然需要考虑并发问题(除非它推测性地获取用户当前正在查看的任何内容的锁定,这通常是一个讨厌的想法)但至少你不必处理网络文件系统锁定问题以及

答案 1 :(得分:0)

您正在研究处理访问数据库的多个用户的一些经典问题:“失去的更新”。

请参阅本教程的并发性: http://www.brainbell.com/tutors/php/php_mysql/Transactions_and_Concurrency.html

至少你不必担心db文件本身被这个损坏,因为SQLite在写入时会锁定整个文件。话虽如此,如果您希望多个客户端同时访问您的应用程序,SQLite不建议您使用它。