SQLite na serwerze produkcyjnym? [Zamknięte]

9

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?

Dr Hydralisk
źródło
2
Ostrzeżenie: Pytanie i niektóre odpowiedzi zawierają nieporozumienia, nieporozumienia i nieaktualne informacje!
Chris S
Oceniliśmy
Uri Agassi

Odpowiedzi:

4

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

Cez
źródło
Dzięki za odpowiedzi, więc w zasadzie możesz pisać tylko do bazy danych 1 na raz? Ale nadal możesz mieć wielu ludzi czytających z bazy danych bez blokowania? Jeśli tak, właśnie wpadłem na kilka pomysłów na system buforowania.
Dr Hydralisk
Rzucana liczba „100 000” jest bezużyteczna. Dokumenty brzmią: „Ogólnie rzecz biorąc, każda witryna, która otrzymuje mniej niż 100 000 działań dziennie / powinna działać dobrze z SQLite”. „Trafienie” jest zwykle definiowane jako żądanie HTTP. Obejmuje to żądanie dotyczące każdego pliku .js, .css i obrazu przy trafieniu. Co to ma wspólnego z wydajnością DB? Zakładając, że autorzy oznaczali „odsłonę strony”, jest to nadal bezużyteczne. Ile zapytań na odsłonę strony? Stosunek odczytów do zapisów? Na jakim sprzęcie działa DB? Nie jest dobrym pomysłem używanie SQLite na stronie internetowej, gdy istnieje co najmniej tuzin innych lepszych narzędzi do tego zadania.
jamieb
@Dr Hydralisk Tak, odczyty mogą odbywać się równolegle .. tak jak plik
Cez
@jamieb Punkt „hitów” jest słuszny. Nikt jednak nie wspomniał o tym, jakie zasoby sprzętowe lub serwerowe są dostępne, więc może to być mały wirtualny serwer dla wszystkiego, co wiemy. Zaangażowanie baz danych SQLite w system buforowania lub przede wszystkim tabele tylko do odczytu mogą przynieść poprawę wydajności, szczególnie gdy serwer bazy danych jest zdalny. Pamięć podręczna + pamięć podręczna SQLite zapytań do bazy danych pobije same zapytania od baz danych.
Cez
3

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 .

XDF
źródło
1

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.

John Gardeniers
źródło
PRAGMA można dostosować w celu zwiększenia wydajności kosztem potencjalnie sporadycznego uszkodzenia bazy danych (ale nie utraty danych). Z mojego doświadczenia wynika, że ​​na starej maszynie z systemem WindowsXP mogłem zmusić SQLite do pobierania wstawek w przybliżeniu 250–300 obr./s.
djangofan
-1, ponieważ się nie zgadzam. Zbudowałem i przeszukałem bazy danych SQLite o wielkości kilku GB i nigdy nie otrzymywałbym takiej samej liczby zapytań na sekundę, używając na przykład MySQL (na tym samym sprzęcie). SQLite może z łatwością wykonywać zapytania z prędkością 120 000 zapisów na sekundę, jeśli wiesz, jak poprawnie masować .
Alix Axel,
0

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.

Devrim
źródło
0

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ść.

jamieb
źródło
W WAL tylko współbieżni pisarze są blokowani. Dodatkowo domyślny silnik MySQL (MyISAM) blokuje również pełne tabele za każdym razem, gdy pojawia się zapytanie zapisu.
Alix Axel,
1
@AlixAxel Ta odpowiedź została napisana sześć miesięcy przed udostępnieniem WAL.
jamieb