2011-10-10 16 views
5

Tengo una aplicación de Pilones usando SQLAlchemy con SQLite como back-end. Me gustaría saber si cada operación de lectura que va a SQLite siempre conducirá a una lectura de disco duro (que es muy lenta en comparación con la RAM) o si ya están involucrados algunos mecanismos de almacenamiento en caché.¿Las lecturas de SQLite siempre golpean el disco?

  • ¿SQLite mantiene un subconjunto de la base de datos en la RAM para un acceso más rápido?
  • ¿Puede el sistema operativo (Linux) hacer eso automáticamente?
  • ¿Cuánta aceleración puedo esperar usando una base de datos de producción (MySQL o PostgreSQL) en lugar de SQLite?

Respuesta

3
  1. Sí, SQLite tiene su propia caché de memoria. Compruebe PRAGMA cache_size, por ejemplo. Además, si está buscando aceleraciones, marque PRAGMA temp_store. También hay API para implementar tu propio caché.

  2. La base de datos SQLite es solo un archivo para el sistema operativo. Nada se hace 'automáticamente' por eso. Para garantizar que el almacenamiento en caché ocurra, hay sqlite.h define y configuraciones de pragma de tiempo de ejecución.

  3. Depende de lo anterior, en muchos casos se produce una desaceleración.

+1

En el n. ° 2, ¿quiere decir que sqlite le dice al sistema operativo que no use la memoria caché de disco? –

+0

@Mechanicalsnail Quiero decir que el sistema operativo no hará "automáticamente" nada por la base de datos SQLite que no haga para ningún otro archivo. – hamstergene

+0

pero luego no se lee (y escribe) en caché? –

0

¿Cuánto aumento de velocidad podría esperar mediante el uso de una base de datos de producción (MySQL o PostgreSQL) en lugar de SQLite?

¿Está utilizando sqlite en un entorno de servidor de producción? Probablemente no debería ser:

De Appropriate Uses for Sqlite:

SQLite normalmente funciona bien como backend de base de datos a un sitio web. Pero si su sitio web está tan ocupado que está pensando en dividir el componente de base de datos en una máquina separada, entonces debería considerar considerar el uso de un motor de base de datos cliente/servidor de clase empresarial en lugar de SQLite.

SQLite no está diseñado para, y nunca fue pensado para escalar bien; SQLite comercializa la conveniencia para el rendimiento; si el rendimiento es una preocupación, debería considerar otro DBMS

+6

La página que vinculó específicamente dice que SQLite * does * funciona bien en un entorno de producción de hasta 100K a 1000K hits por día (o, como se dice, 99.9% de sitios web). Solo cuando mueve la base de datos al servidor separado del servidor web, sugieren que es un servidor de base de datos real. –

Cuestiones relacionadas