2012-06-20 15 views
6

我有一個不幸的情況,多個Perl進程同時寫入和讀取相同的SQLite3數據庫。如何從多個Perl進程使用相同的SQLite3數據庫?

這經常會導致Perl進程崩潰,因爲兩個進程會同時寫入,或者一個進程將從數據庫中讀取,而另一個進程將嘗試更新同一記錄。

有誰知道我如何協調多個進程來使用相同的sqlite數據庫?

我將致力於將此係統移至不同的數據庫引擎,但在此之前,我需要修復它以使其正常工作。

+3

你可能會考慮通過'運行連接到數據庫使用DBIx :: Connector對象,並運行你的查詢(修正=> ...)'DBIx ::連接器的API。它重試失敗,並具有很強的容錯性。在這種情況下'txn()'函數可能會更好。 – DavidO

回答

7

SQLite旨在用於多個進程。如果您將sqlite文件託管在網絡驅動器上,並且可能有一種編譯方式,以便它可以在一個進程中使用,但我會定期在多個進程中使用它。如果遇到問題,請嘗試增加超時值。 SQLite使用文件系統鎖來保護數據免受同時訪問。如果一個進程正在寫入文件,則第二個進程可能需要等待。我將超時設置爲3秒,並且具有很小的問題。

Here is the link to set the timeout value

+0

冗長的詳細信息:http://www.sqlite.org/docs.html/SQLite技術/設計文檔 – biziclop

相關問題