2011-03-12 47 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編寫。

相關問題