2011-10-10 14 views
5

Mam aplikację Pylons przy użyciu SQLAlchemy z SQLite jako backend. Chciałbym się dowiedzieć, czy każda operacja odczytu do SQLite zawsze prowadzi do odczytu dysku twardego (który jest bardzo powolny w porównaniu do pamięci RAM) lub niektóre mechanizmy buforowania są już włączone.Czy odczyty SQLite zawsze trafiają na dysk?

  • czy SQLite utrzymuje podzbiór bazy danych w pamięci RAM, aby uzyskać szybszy dostęp?
  • Czy system operacyjny (Linux) może to zrobić automatycznie?
  • Jakiego przyspieszenia można się spodziewać, korzystając z produkcyjnej bazy danych (MySQL lub PostgreSQL) zamiast SQLite?

Odpowiedz

3
  1. Tak, SQLite posiada własną pamięć podręczną pamięci. Na przykład sprawdź PRAGMA cache_size. Ponadto, jeśli szukasz przyspieszeń, sprawdź PRAGMA temp_store. Istnieje również API do implementacji własnej pamięci podręcznej.

  2. Baza danych SQLite to tylko plik do systemu operacyjnego. Nic nie jest "automatycznie" zrobione za to. Aby zapewnić buforowanie, istnieje sqlite.h definiuje i ustawienia pragma runtime.

  3. Zależy, jest wiele przypadków, gdy zamiast tego pojawi się spowolnienie.

+1

W # 2, masz na myśli, że sqlite faktycznie mówi systemowi operacyjnemu, aby nie używał pamięci podręcznej dysku? –

+0

@Mechanicalsnail Mam na myśli to, że OS nie "automatycznie" zrobi nic dla bazy danych SQLite, której nie robi dla żadnego innego pliku. – hamstergene

+0

, ale potem nie będzie czytać (i zapisuje) będzie buforowana? –

0

Ile SpeedUp mogę spodziewać stosując produkcyjnej bazy danych (MySQL lub postgres'owy) zamiast SQLite?

Czy używasz sqlite w środowisku serwera produkcyjnego? Prawdopodobnie nie powinno być:

Od Appropriate Uses for Sqlite:

SQLite będzie normalnie działać prawidłowo jako backend bazy danych na stronie internetowej. Ale jeśli witryna jest tak zajęta, że ​​myślisz o podzieleniu komponentu bazy danych na oddzielne urządzenie, to powinieneś zdecydowanie rozważyć użycie bazy danych typu klient/serwer klasy korporacyjnej zamiast SQLite.

SQLite nie jest dobrze zaprojektowany i nigdy nie był przeznaczony do skalowania; SQLite oferuje wygodę dla wydajności; jeśli wydajność jest problemem, należy wziąć pod uwagę inne DBMS

+6

Strona, którą łączysz, mówi, że SQLite * działa * dobrze w środowisku produkcyjnym do 100 000 KB dziennie (lub, jak to mówią, 99,9% stron internetowych). Dopiero po przeniesieniu bazy danych na serwer, niezależnie od serwera WWW, sugerują one rzeczywisty serwer bazy danych. –