2012-06-20 19 views
6

Tôi có một tình huống không may khi nhiều quy trình Perl viết và đọc cùng một cơ sở dữ liệu SQLite3 cùng một lúc.Làm thế nào để sử dụng cùng một cơ sở dữ liệu SQLite3 từ nhiều quy trình Perl?

Điều này thường làm cho các quy trình Perl gặp sự cố khi hai quá trình sẽ được viết cùng một lúc hoặc một quá trình sẽ đọc từ cơ sở dữ liệu trong khi người khác cố cập nhật cùng một bản ghi.

Có ai biết cách tôi có thể phối hợp nhiều quy trình để làm việc với cùng một cơ sở dữ liệu sqlite không?

Tôi sẽ làm việc để di chuyển hệ thống này sang một công cụ cơ sở dữ liệu khác nhưng trước khi tôi làm điều đó, tôi bằng cách nào đó cần sửa nó để hoạt động như hiện tại.

+3

Bạn có thể xem xét kết nối với DB sử dụng một đối tượng DBIx :: Connector, và chạy các truy vấn của bạn thông qua 'chạy (fixup => ...) 'API của DBIx :: Connector. Nó thử lại trên thất bại, và có khả năng chịu lỗi mạnh. Hàm 'txn()' có thể còn tốt hơn trong tình huống này. – DavidO

Trả lời

7

SQLite được thiết kế để được sử dụng từ nhiều quy trình. Có một số trường hợp ngoại lệ nếu bạn lưu trữ tệp sqlite trên một ổ đĩa mạng và có thể cách biên dịch nó sao cho nó được sử dụng từ một quy trình, nhưng tôi sử dụng nó từ nhiều quy trình thường xuyên. Nếu bạn đang gặp sự cố, hãy thử tăng giá trị thời gian chờ. SQLite sử dụng khóa hệ thống tập tin để bảo vệ dữ liệu khỏi truy cập đồng thời. Nếu một tiến trình đang ghi vào tập tin, quá trình thứ hai có thể phải đợi. Tôi đặt thời gian chờ của mình thành 3 giây và có rất ít vấn đề với điều đó.

Here is the link to set the timeout value

+0

Chi tiết dài dòng: http://www.sqlite.org/docs.html/Tài liệu kỹ thuật/thiết kế SQLite – biziclop

Các vấn đề liên quan