2016-04-05 7 views
0

(github.com/mattn/go-sqlite3 kullanarak ve veritabanı/sql sürücüleri.)Eşzamanlı goroutlar veritabanına erişmeyi denediğinde, SQLite dosyası/veritabanı kilitlerini önlemek için alınacak önlemler? Şu anda birden goroutines bir noktada eş zamanlı bir SQLite veritabanı dosyası sorgulamak veya güncelleştirmek deneyebilirsiniz bir uygulama üzerinde çalışıyorum

neler Kilitleme/eşzamanlı erişimin nasıl kontrol edildiğinden emin değilim; sürücü ilgilenir mi, yoksa bir muteks veya kanal ile istekleri serileştirmenin bir yolunu bulmam gerekiyor mu?

Sürücü, işlemleri gerçekleştirmek için bekleyip beklemeyeceğini ve veritabanı dosyası bir nedenle kilitliyse veya bir hata atıp pes ederse yeniden deneyecek mi?

cevap

1

Her bir virüs için ayrı bir bağlantı açmalısınız. Sürücü kilitleme ve erişim ile ilgilenecektir, ancak her bir kontrol için farklı bir bağlantıya sahip olmalısınız.

gDb, err = sql.Open("sqlite3", "file:databaselocked.sqlite?cache=shared&mode=rwc") 

Github bu parçacığı üzerinde yorumlarına bakın, paketin yazar tarafından özellikle bağlantılı yorumunu:

Ayrıca, bazı erişimi hızlandırmak için bağlantı açılması için bazı parametreler ekleyebilirsiniz https://github.com/mattn/go-sqlite3/issues/148#issuecomment-56764080

+0

Bağlantınızdaki yorumları takip ettikten sonra, veritabanına istekleri serileştirmenin bir yolunu bulmak için çok daha güvenli bağlantılara sahip olabileceği gibi veritabanı erişimi için çekişmeye yol açabilecek sorunlar var gibi görünüyor. –

İlgili konular