SQLite SSS'den şunu biliyordum:
Birden çok işlem aynı veritabanını aynı anda açabilir. Birden çok işlem
SELECT
aynı anda yapılabilir. Ancak veritabanında herhangi bir anda yalnızca bir işlem değişiklik yapabilir.
Yani, bildiğim kadarıyla elimden anladığım kadarıyla: 1) Okuma birden çok iş parçacığı db ( SELECT
) birden çok iş parçacığı 2) Okuma db ( SELECT
tek iplikle) ve yazma ( CREATE
, INSERT
, DELETE
)
Ancak, okuyucular yazarları ve bir yazar okuyucuları engellemediğinden , daha fazla eşzamanlılık sağlayan Yazma Öncesi Günlüğü hakkında okudum . Okuma ve yazma aynı anda devam edebilir.
Ben bulduğumda Son olarak, tamamen bulanık var ettik bunu belirtilen zaman:
SQLITE_LOCKED hatası almanın diğer nedenleri:
- Çalışılıyor
CREATE
veyaDROP
bir süre bir tablo ya da dizinSELECT
deyimi hala beklemede.SELECT
Aynı tabloda a etkinken bir tabloya yazmaya çalışıyorum .SELECT
Eğer sqlite bunu yapmaya ayarlanmamışsa, çoklu iş parçacıklı bir uygulamada aynı anda aynı tabloda iki tane yapmaya çalışın.- fcntl (3, DB dosyasındaki F_SETLK çağrısı başarısız oluyor. Bunun nedeni bir NFS kilitleme sorunu olabilir. Bu sorunun bir çözümü DB'yi uzaklaştırmak ve yeni bir Inode değerine sahip olacak şekilde geri kopyalamaktır
Yani, kendim için açıklığa kavuşturmak istiyorum, kilitten kaçınmak gerekiyor mu? İki farklı konuyu aynı anda okuyabilir ve yazabilir miyim? Teşekkürler.
isolation_level=None
. Paylaşılan önbellek modu olmadan örnekleri iş parçacıkları arasında nasıl paylaşabilirim?