我有一個不幸的情況,多個Perl進程同時寫入和讀取相同的SQLite3數據庫。如何從多個Perl進程使用相同的SQLite3數據庫?
這經常會導致Perl進程崩潰,因爲兩個進程會同時寫入,或者一個進程將從數據庫中讀取,而另一個進程將嘗試更新同一記錄。
有誰知道我如何協調多個進程來使用相同的sqlite數據庫?
我將致力於將此係統移至不同的數據庫引擎,但在此之前,我需要修復它以使其正常工作。
我有一個不幸的情況,多個Perl進程同時寫入和讀取相同的SQLite3數據庫。如何從多個Perl進程使用相同的SQLite3數據庫?
這經常會導致Perl進程崩潰,因爲兩個進程會同時寫入,或者一個進程將從數據庫中讀取,而另一個進程將嘗試更新同一記錄。
有誰知道我如何協調多個進程來使用相同的sqlite數據庫?
我將致力於將此係統移至不同的數據庫引擎,但在此之前,我需要修復它以使其正常工作。
SQLite旨在用於多個進程。如果您將sqlite文件託管在網絡驅動器上,並且可能有一種編譯方式,以便它可以在一個進程中使用,但我會定期在多個進程中使用它。如果遇到問題,請嘗試增加超時值。 SQLite使用文件系統鎖來保護數據免受同時訪問。如果一個進程正在寫入文件,則第二個進程可能需要等待。我將超時設置爲3秒,並且具有很小的問題。
冗長的詳細信息:http://www.sqlite.org/docs.html/SQLite技術/設計文檔 – biziclop
你可能會考慮通過'運行連接到數據庫使用DBIx :: Connector對象,並運行你的查詢(修正=> ...)'DBIx ::連接器的API。它重試失敗,並具有很強的容錯性。在這種情況下'txn()'函數可能會更好。 – DavidO