Znam SQLite od dawna i wiem, że płonie szybko, ale nigdy nie próbowałem go na serwerze produkcyjnym. Nigdy nie byłem w stanie znaleźć dokładnego oszacowania, jaki ruch może obsłużyć przed upadkiem.
Czy ktoś ma jakieś numery lub artykuł na ten temat?
Znam SQLite od dawna i wiem, że płonie szybko, ale nigdy nie próbowałem go na serwerze produkcyjnym. Nigdy nie byłem w stanie znaleźć dokładnego oszacowania, jaki ruch może obsłużyć przed upadkiem.
Czy ktoś ma jakieś numery lub artykuł na ten temat?
Odpowiedzi:
Niestety nie mam żadnych danych liczbowych na temat możliwości ładowania, ale kilka komentarzy na temat niektórych czynników ograniczających wydajność:
Na szybkość SQLite ma wpływ prędkość dysku, na którym jest on włączony oraz to, czy dzieje się wiele wstawień / aktualizacji (tj. Dostęp do zapisu). Blokada zapisu jest ograniczona prędkością wirowania dysku
Transakcje są uruchamiane domyślnie, ale można uzyskać lepszą wydajność, jeśli masz uruchomić i zatwierdzić transakcję. Miałem bardzo szybkie wstawki masowe podczas programowania transakcji
Jeśli na ogół czytasz tylko dane, z mojego doświadczenia wynika, że osiągasz dobrą wydajność. Tak więc SQLite może być używany jako system buforowania do przechowywania odczytów serwera bazy danych, szczególnie zdalnych lub złożonych zapytań.
Zużywa mniej zasobów niż serwer bazy danych, więc może to mieć wpływ na wydajność witryny, ponieważ zwalnia więcej zasobów dla serwera sieci Web i kodu aplikacji
Jeśli wymagana jest pewna liczba jednoczesnych zapisów, serwer bazy danych (np. MySQL, Postgres) może lepiej służyć
Jak stwierdził Devrim , witryna SQLite stwierdza, że około 100 000 użytkowników dziennie powinno być w porządku. System Trac wymaga zapisu, więc wydajność prawdopodobnie byłaby w tym przypadku wolniejsza
Mam kilka punktów do dodania do tych dobrych odpowiedzi.
Obecna wersja SQLite ma WAL (zapis z wyprzedzeniem), dzięki czemu odczyt i zapis mogą być kontynuowane jednocześnie. Zatem tradycyjne ograniczenie dla pojedynczego pisarza wspomniane w poprzednich odpowiedziach już nie istnieje. Nie widziałem jeszcze WAL w produkcji, więc nie mogę komentować, jak dobrze się skaluje.
Korzystając z WAL, czy nie, jeśli twoja baza danych SQLite jest tylko do odczytu (lub jest aktualizowana wsadowo) i pasuje do pamięci RAM (twój system operacyjny ma wystarczającą ilość wolnej pamięci RAM, aby przechowywać ją w buforach), może bardzo dobrze skalować się w produkcyjnej aplikacji internetowej. Osobiście byłem bardzo sceptycznie nastawiony do jego wydajności, skalowalności i solidności, ale teraz po dziewięciu miesiącach produkcji udało się bardzo dobrze obsługiwać nawet najbardziej skomplikowane części systemu .
Sqlite doskonale nadaje się do osadzania w aplikacjach i do tego jest przeznaczony, ale z pewnością nie jest „niesamowicie szybki”. Używam go do kilku własnych aplikacji, wyłącznie dla wygody posiadania tylko dwóch plików, które można skopiować na inny komputer, aby uzyskać w pełni działającą aplikację. Testy przeciwko MySQL przy użyciu tej samej struktury, indeksów itp. Pokazują, że Sqlite jest znacznie wolniejszy, nawet w przypadku małych baz danych. Oczekiwałbym, że różnica wydajności wzrośnie wraz ze wzrostem wielkości bazy danych, chociaż nie mogę tego stwierdzić na pewno, ponieważ korzystałem z niej tylko z bazami danych mniejszymi niż 100 MB.
Myślę, że sqlite jest tylko szybszy niż plik tekstowy / xml (możesz być zaskoczony, jeśli spróbujesz). I nie obsługuje współbieżności, jeśli chcesz stworzyć witrynę dla intranetu, w której ludzie rejestrują swoje godziny pracy lub używają biletów, może to dobrze służyć. Poza tym należy tego unikać i zastępować mysql lub couchdb.
Witryna sqlite mówi, że 100 tys. użytkowników dziennie powinno być w porządku, ale bardzo w to wątpię, ponieważ prosty projekt trac bardzo się blokuje przy użyciu biurowym za 10 ppl.
Sqlite nie jest tradycyjną aplikacją DB klient / serwer. Zasadniczo jest to biblioteka osadzona w innej aplikacji. Jest przeznaczony do aplikacji komputerowych dla jednego użytkownika. Absolutnie nie chcesz próbować używać go jako samodzielnego zastępowania MySQL / PostgreSQL / MS-SQL w środowisku wielu użytkowników, ponieważ cała baza danych jest zablokowana podczas zapisu. Będziesz miał do czynienia z problemami z rywalizacją nawet przy niewielkim obciążeniu, które zniszczy wydajność.