Mam bazę danych SQLite używaną przez dwa procesy. Zastanawiam się, czy przy najnowszej wersji SQLite, podczas gdy jeden proces (połączenie) rozpoczyna transakcję zapisu do bazy danych, czy drugi proces będzie mógł jednocześnie czytać z bazy danych?
87
Odpowiedzi:
Zebrałem informacje z różnych źródeł, głównie z sqlite.org, i złożyłem je razem:
Po pierwsze, domyślnie wiele procesów może mieć otwartą tę samą bazę danych SQLite w tym samym czasie, a kilka dostępów do odczytu może być obsługiwanych równolegle.
W przypadku zapisu, pojedynczy zapis do bazy danych blokuje bazę na krótki czas, nic, nawet odczyt, nie ma dostępu do pliku bazy danych.
Począwszy od wersji 3.7.0, dostępna jest nowa opcja „ Zapisywanie z wyprzedzeniem w dzienniku ” (WAL) , w której odczyt i zapis może odbywać się jednocześnie.
Domyślnie WAL nie jest włączony. Aby włączyć WAL, zapoznaj się z dokumentacją SQLite.
źródło
SQLite3 jawnie zezwala na wiele połączeń :
Do udostępniania połączeń użyj udostępnionej pamięci podręcznej SQLite3 :
źródło