Tworzę mały system z dwoma komponentami: jeden odpytuje dane z zasobu internetowego i tłumaczy je na dane SQL, aby zachować je lokalnie; drugi odczytuje dane sql z lokalnej instancji i podaje je za pośrednictwem json i spokojnego interfejsu API.
Pierwotnie planowałem zachować dane w Postgresql, ale ponieważ aplikacja będzie miała bardzo małą ilość danych do przechowywania i ruchu do obsługi, pomyślałem, że to przesada. Czy SQLite spełnia Twoje zadanie? Podoba mi się pomysł na małą powierzchnię i nie muszę utrzymywać kolejnego serwera SQL dla tego jednego zadania, ale martwię się o współbieżność.
Wydaje się, że z włączonym rejestrowaniem z wyprzedzeniem zapisu, jednoczesne odczytywanie i zapisywanie bazy danych SQLite może się zdarzyć bez blokowania któregokolwiek procesu z bazy danych.
Czy pojedyncza instancja SQLite może wytrzymać dostęp do dwóch równoległych procesów, jeśli tylko jeden czyta, a drugi pisze? Zacząłem pisać kod, ale zastanawiałem się, czy jest to niewłaściwe zastosowanie SQLite.
źródło
Odpowiedzi:
Szukasz dokumentacji dotyczącej blokowania plików i współbieżności .
Procesy SQLite używają serii blokad do obsługi współbieżności; czytać, kilka procesów może uzyskać
SHARED
blokadę.Proces, który pisze, będzie musiał uzyskać
RESERVED
blokadę i tylko wtedy, gdy faktycznie trzeba opróżnić zmiany na dysku, przechodzi doPENDING
stanu. Każdy proces odczytu będzie wtedy musiał odblokować plik, po czym proces zapisu będzie mógł przejść doEXCLUSIVE
zapisywania do rzeczywistego pliku bazy danych.Ponieważ proces zapisujący musi tylko zablokować plik bazy danych dla rzeczywistych zapisów (opróżnianie pamięci, zatwierdzanie), konfiguracja z jednym czytnikiem i tylko jednym zapisującym będzie działać całkiem dobrze. Spodziewałbym się, że będzie on działał równie dobrze, jeśli nie lepiej, jako konfiguracja z tylko jednym procesem wykonującym całe czytanie i pisanie.
SQLite jest mniej odpowiedni, gdy wiele procesów często pisze w tej samej bazie danych, ponieważ pisanie wymaga uzyskania wyłącznej
PENDING
blokady w celu serializacji zmian.źródło
Chciałem tylko sprawdzić i poinformować wszystkich, że wdrożenie zakończyło się powodzeniem. Praca z SQLite była prawdziwą przyjemnością i dzięki temu, że pisaliśmy go tylko w jednym procesie, nigdy nie mieliśmy problemów z blokowaniem ... nawet przy bardzo szybkich jednoczesnych odczytach z drugiego procesu.
źródło