我正在使用SQLite编写一个简单的客户信息管理软件。
一个exe文件,一个db文件,一些dll文件。 - 就是这样:)
2~4人可能会同时运行此exe文件并访问数据库。
不仅仅是阅读,而且他们也会经常进行编辑。
是的,现在这里出现了最着名的问题之一......“同步”
我试图在有人尝试时创建/删除临时空文件 编辑它。 (这是访问数据库的“密钥”。)
但必须有更好的方法:(
防止此问题的最佳方法是什么?
答案 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不建议您使用它。