2012-06-20 13 views
6

Birden fazla Perl işleminin aynı SQLite3 veritabanını aynı anda okuduğu ve okuduğu talihsiz bir durum var.Birden çok Perl işleminden aynı SQLite3 veritabanını nasıl kullanılır?

Bu, Perl işlemlerinin iki işlemin aynı anda yazılacağı veya bir işlemin veritabanından okunacağı sırada diğerinin aynı kaydı güncelleştirmeye çalıştığı sırada çökmesine neden olur.

Aynı sqlite veritabanıyla çalışmak için birden çok işlemi nasıl koordine edeceğimi bilen var mı?

Bu sistemi farklı bir veritabanı motoruna taşımaya çalışacağım, ancak bunu yapmadan önce, bir şekilde çalışması gerektiği gibi düzeltmem gerekiyor.

+3

(Fixup => ...)' DBIx :: Connector API. Arızası tekrar dener ve güçlü hata toleransına sahiptir. Txn() işlevi bu durumda daha da iyi olabilir. – DavidO

cevap

7

SQLite, birden çok işlemden kullanılmak üzere tasarlanmıştır. Bir sqlite dosyasını bir ağ sürücüsünde barındırıyorsanız ve bir süreci kullanmasını bekleyecek şekilde derlemenin bir yolu varsa, bazı istisnalar vardır, ancak bunu düzenli olarak çok sayıda işlemden kullanırım. Sorun yaşıyorsanız, zaman aşımı değerini artırmayı deneyin. SQLite, verileri eşzamanlı erişime karşı korumak için dosya sistemi kilitlerini kullanır. Bir işlem dosyaya yazıyorsa, ikinci bir işlemin beklemesi gerekebilir. Zaman aşımlarımı 3 saniyeye ayarlıyorum ve bununla çok az problemim var. Sen `çalıştırmak yoluyla sorguları bir DBIx :: Bağlayıcı nesnesini kullanarak DB bağlanırken ve çalışan düşünebilir

Here is the link to set the timeout value

+0

Uzun ayrıntıları: http://www.sqlite.org/docs.html/SQLite Teknik/Tasarım Belgeleri – biziclop

İlgili konular