2011-03-12 54 views
0

(1)由于SQLite数据库是单个文件,因此在使用SQLite时,以下两种情况有什么不同? -SQLite - 通过Web应用程序更新与客户端/服务器应用程序

情况A - 2用户使用Web应用程序

情况B作出更新到同一个数据库 - 2点的WinForms应用作出更新到同一个数据库(即客户机/服务器模型)

,这个问题就我阅读SQLite的常见问题解答以下FAQ问题后 - http://www.sqlite.org/faq.html#q5 - 在同样可以多个应用程序或同一应用程序访问多个实例单个数据库文件 时间?

“多个进程可以具有相同的数据库在同一时间打开.....”

(2)在情况A(网络应用程序),是连接到数据库的进程数= 1?在情况B(客户机/服务器)中,它是2吗?对于案例A,如果SQLite数据库文件与Web服务器位于同一台计算机上,而网络服务器与网络服务器上的共享服务器位于同一台计算机上,那么它是否会有所不同?

回答

1

多个进程可以同时读取数据库,执行查询等操作,但写入操作只能一次执行一次。通常,打开数据库的第一个进程可以写入数据库,其他尝试写入数据的用户可以使用sqlite3_busy_handler()或sqlite3_busy_timeout()API函数处理SQLITE_BUSY。

请注意,在成功写入sqlite数据库后,同一数据库上的其他进程读取的数据现在可能过时(缓存,因为它现在是不连贯的)。你需要处理这种情况。

情况A和B可能都是1或2:这取决于Web应用程序和客户端服务器应用程序是同时访问数据库还是依次访问数据库。既然你不知道先验会发生,你应该承担并发访问和相应的处理。

sqlite数据库可以在网络共享上或不在;锁定机构是内部的。

0

您可能还想考虑使用Berkeley DB。 Berkeley DB SQL API与SQLite兼容,但底层锁定机制允许并发写入器同时共存。像SQLite一样,Berkeley DB是一个链接到你的应用程序的库。 BDB还支持访问数据库的并发线程或进程的混合。

有几篇有趣的白皮书将Berkeley DB与SQLite进行比较和对比。有一本Benefits and Integration白皮书以及Performance Comparison白皮书,由SQLite权威指南的作者Mike Owens编写。

相关问题