2011-10-10 11 views
5

Ho un'applicazione Pylons che utilizza SQLAlchemy con SQLite come backend. Mi piacerebbe sapere se ogni operazione di lettura che viene eseguita su SQLite porterà sempre a una lettura del disco rigido (che è molto lenta rispetto alla RAM) o sono già coinvolti alcuni meccanismi di memorizzazione nella cache.Le letture SQLite colpiscono sempre il disco?

  • SQLite mantiene un sottoinsieme del database in RAM per un accesso più rapido?
  • Il sistema operativo (Linux) può farlo automaticamente?
  • Quanta velocità posso aspettarmi utilizzando un database di produzione (MySQL o PostgreSQL) anziché SQLite?

risposta

3
  1. Sì, SQLite ha una propria cache di memoria. Controlla ad esempio PRAGMA cache_size. Inoltre, se stai cercando gli speedup, controlla PRAGMA temp_store. C'è anche l'API per implementare la tua cache.

  2. Il database SQLite è solo un file sul sistema operativo. Niente è 'automaticamente' fatto per questo. Per garantire che la memorizzazione nella cache si verifichi, esistono le definizioni sqlite.h e le impostazioni di esecuzione di runtime.

  3. Dipende, ci sono molti casi in cui invece si ottiene un rallentamento.

+1

# 2, vuoi dire che sqlite in realtà dice al sistema operativo di non usare la cache del disco? –

+0

@Mechanicalsnail Intendo che il sistema operativo non eseguirà "automaticamente" nulla per il database SQLite che non esegue per nessun altro file. – hamstergene

+0

ma poi non leggerà (e scriverà) nella cache? –

0

Quanto aumento di velocità potrebbe mi aspetto utilizzando un database di produzione (MySQL o Postgres), invece di SQLite?

Si sta utilizzando sqlite in un ambiente server di produzione? Probabilmente non dovrebbe essere:

Da Appropriate Uses for Sqlite:

SQLite normalmente funziona bene come il terminale database da un sito web. Ma se il tuo sito web è così occupato che stai pensando di suddividere il componente di database su una macchina separata, allora dovresti considerare l'utilizzo di un motore di database/client di database di classe enterprise anziché SQLite.

SQLite non è progettato bene e non è mai stato progettato per scalare correttamente; SQLite scambia convenienza per le prestazioni; se le prestazioni sono un problema, dovresti considerare un altro DBMS

+6

La pagina che hai linkato specifica dice che SQLite * funziona bene in un ambiente di produzione fino a 100K a 1000K di hit al giorno (o, come si dice, il 99,9% dei siti web). È solo quando si sposta il database sul server separato dal server Web che suggeriscono un vero server di database. –

Problemi correlati