2009-04-25 19 views
32

Czy ktoś ma doświadczenie w świecie rzeczywistym z uruchamianiem bazy danych Sqlite na udziale SMB w sieci LAN (Windows lub Linux)?Sqlite przez udział sieciowy

Oczywistym jest, że nie jest to najszybszy sposób na udostępnienie bazy danych Sqlite.

Oczywistym zastrzeżeniem jest to, że może być powolny, a Sqlite obsługuje tylko zapis pojedynczego wątku w bazie danych. Więc stajesz się dużo mniej współbieżny, ponieważ twoje aktualizacje bazy danych będą blokować DB dłużej (DB będzie zablokowany, gdy dane będą przesyłane przez sieć).

Dla mojej aplikacji ilość danych, które chciałbym udostępnić jest dość mała, a zapisy nie są zbyt częste (kilka pisze co najwyżej kilka sekund).

Na co należy uważać? Czy to działa?

Wiem, że to nie jest to, do czego został zaprojektowany Sqlite, jestem mniej zainteresowany rozwiązaniem opartym na serwerze Postgres/MySQL/Sql, ponieważ staram się, aby moja aplikacja była możliwie jak najmniej obciążona przy minimalnej liczbie zależności.

Related Links:

Z sqlite mailing list, więc myślę, że jedno pytanie brzmi, jak zawodne są apis FileLock over SMB (Windows lub Linux)

+1

wygląda linux samby może mieć oplocks włączone, w zależności od jego konfiguracji. Im więcej patrzę na tym problemie mniej wygodne używanie tego rozwiązania, może łatwo stać się koszmarem wsparcia –

Odpowiedz

23

Moje doświadczenie w bazach danych opartych na plikach (tj. Bez serwera bazy danych), które sięga ponad dwudziestu lat, polega na tym, że jeśli spróbujesz je udostępnić, będą one nieodwołalnie uszkodzone. Zdecydowanie polecam ponowne spojrzenie na MySQL.

Proszę zauważyć, że nie wybieram SQLite - używam go sam, po prostu nie jako wspólna baza danych.

+0

tak, bawiąc się ideą udostępniania tych informacji przez gniazda sieci peer to peer. jest zbyt wiele rzeczy, które mogą pójść nie tak z wbudowanym db przez udział sieciowy . –

8

No nie jestem wielkim znawcą SQLite, ale wierzę, że Blokowanie rekordów/tabel może nie działać poprawnie i może spowodować uszkodzenie bazy danych. Ponieważ, ponieważ nie ma jednego serwera, który utrzymuje centralne blokowanie, dwie instancje sqlite dll na różnych komputerach współużytkujących ten sam plik przez sieć mogą w ogóle nie działać poprawnie. Jeśli baza danych jest otwarta na tym samym komputerze, sqlite może używać blokowania na poziomie pliku oferowanego przez system operacyjny, aby zachować integralność, ale wątpię, czy działa poprawnie w udziale sieciowym.

6

„Jeśli masz wiele programów klienckich z dostępem do wspólnej bazy danych za pośrednictwem sieci , należy rozważyć użycie silnika bazy danych klient/serwer zamiast SQLite. SQLite będzie pracować nad system plików w sieci, ale ze względu na opóźnienie związane z większością systemów plików sieciowych, wydajność nie będzie zbyt duża, a logika blokowania plików wielu implementacji systemów plików sieciowych zawiera błędy (zarówno w systemach Unix, jak i Windows) .Jeśli blokowanie plików nie działa tak, jak powinno, może to być możliwe dla dwóch lub więcej programów klienckich, aby zmodyfikować tę samą część tej samej bazy danych o tej samej godzinie e, powodując uszkodzenie bazy danych. Ponieważ problem ten wynika z błędów w podstawowej implementacji systemu plików, implementacja, nic nie może zrobić SQLite, aby temu zapobiec."

z https://www.sqlite.org/whentouse.html

że ma również zastosowanie do wszelkiego rodzaju baz danych opartych na plikach jak Microsoft Access