Mam bazę danych SQLite, która jest używana przez dwa procesy. Zastanawiam się, z najnowszą wersją SQLite, podczas gdy jeden proces (połączenie) uruchamia transakcję do zapisu do bazy danych, czy drugi proces będzie mógł jednocześnie odczytać z bazy danych?Czy mogę czytać i zapisywać dane w bazie danych SQLite jednocześnie z wielu połączeń?
Odpowiedz
Zebrałem informacje z różnych źródeł, głównie z sqlite.org, i umieścić je razem:
pierwsze domyślnie wiele procesów może mieć tę samą bazę danych SQLite otwarte w tym samym czasie, a może kilka odczytu dostępy być spełnione równolegle.
W przypadku zapisu pojedynczy zapis do bazy danych blokuje bazę danych przez krótki czas, w ogóle nic, nawet odczyt, nie ma dostępu do pliku bazy danych.
Począwszy od wersji 3.7.0 dostępna jest nowa opcja “Write Ahead Logging” (WAL), w której czytanie i pisanie może być wykonywane jednocześnie.
Domyślnie WAL nie jest włączona. Aby włączyć WAL, zapoznaj się z dokumentacją SQLite.
journal_mode = WAL rozwiązuje mój problem! –
SQLite3 wyraźnie pozwala multiple connections:
(5) Czy wiele aplikacji lub wiele instancji tego samego dostępu do pojedynczego pliku bazy danych w tym samym czasie aplikacji?
Wiele procesów może otwierać tę samą bazę danych w tym samym czasie. Wiele procesów może wykonywać SELECT w tym samym czasie. Jednak tylko jeden proces może wprowadzać zmiany w bazie danych w dowolnym momencie w czasie .
do współdzielenia połączeń, należy SQLite3 shared cache:
Począwszy od wersji 3.3.0, SQLite obejmuje tryb specjalny "współdzielony-cache" (domyślnie wyłączone)
w wersji 3.5.0, tryb współużytkowanej pamięci podręcznej został zmodyfikowany, aby ta sama pamięć podręczna mogła być współużytkowana w całym procesie, a nie tylko wewnątrz pojedynczego wątku .
5.0 Włączanie Shared-Cache Tryb
tryb wspólna-cache jest włączona dla poszczególnych procesów. Za pomocą interfejsu C można użyć następującego interfejsu API do globalnego włączenia lub wyłączenia trybu wspólnej pamięci podręcznej:
int sqlite3_enable_shared_cache (int);
Każdy sqlite3_enable_shared_cache call() efekty kolejnych baz połączenia utworzone za pomocą sqlite3_open(), sqlite3_open16() lub sqlite3_open_v2(). Połączenia bazy danych, które już istnieją, są niezmienione. Każde wywołanie sqlite3_enable_shared_cache() zastępuje wszystkie poprzednie wywołania w ramach tego samego procesu.
- 1. Czy można jednocześnie czytać i zapisywać w pliku?
- 2. Czy procesy współbieżne mogą zapisywać dane w udostępnionej bazie danych?
- 3. Firebase - Jak zapisywać/czytać dane na użytkownika po uwierzytelnieniu
- 4. W jaki sposób mogę przechowywać dane geograficzne w bazie danych Androida i wyszukiwać dla niej dane?
- 5. sqlite3 wstaw i odczytaj dane BLOB w bazie danych
- 6. Jak czytać i drukować dane z mysql w C#
- 7. Dołącz 3 tabel w bazie danych SQLite
- 8. Jak przechowywać obraz w bazie danych SQLite
- 9. Przechowywanie wartości NaN w bazie danych SQLite
- 10. Widok Sqlite w wielu bazach danych
- 11. Czy mogę przechowywać informacje z Google API w bazie danych?
- 12. Jak usunąć dane z wielu tabel w sqlite?
- 13. Jak dodać datę w bazie danych sqlite
- 14. Wstawianie bieżącej daty i czasu w bazie danych SQLite
- 15. Dane URI vs. Binary w bazie danych
- 16. PHP: Symulacja wielu połączeń MySQL z tą samą bazą danych
- 17. Zapisywanie ArrayList w bazie danych SQLite w Androidzie
- 18. Porównaj daty (przechowywane jako ciąg) w bazie danych Android sqlite?
- 19. Czy mogę zaszyfrować hasło bazy danych SQLite?
- 20. Dane hierarchii przenoszenia w bazie danych
- 21. Czy można zapisać/obejrzeć plik wideo i dane czujnika jednocześnie?
- 22. Przechowywanie ogromnych danych w SQLite
- 23. Czy mogę używać jednocześnie COUNT() i DISTINCT?
- 24. Jak zapisywać dane w iOS
- 25. pysqlite - jak zapisywać obrazy
- 26. Wnioski z wielu połączeń
- 27. Jak przechowywać obiekt w bazie danych SQLite w systemie Android?
- 28. Android: wiele wątków piszących na bazie danych SQLite
- 29. Jak mogę ponownie uruchomić auto inkrementacji ID z 1 w bazie danych SQLite Android
- 30. Co to jest kolumna Z_ENT w bazie danych SQLite, która jest tworzona przez dane podstawowe?
powiązane pytanie zobacz tutaj .. http: // stackoverflow.com/questions/12117016/strategy-for-concurrent-read-writing-and-reading-in-sqlite/24038860 # 24038860 – Nepster