2012-02-23 29 views
15

Afaik, SQLite almacena una única base de datos en un solo archivo. Dado que esto disminuiría el rendimiento cuando se trabaja con bases de datos grandes, ¿es posible decirle explícitamente a SQLite que no almacene todo el DB en un solo archivo y almacene diferentes tablas en diferentes archivos?Múltiples archivos para una sola base de datos SQLite

+0

¿Por qué lo necesitas? ¿Cuál es la funcionalidad que no se puede lograr/O los problemas que pueden ocurrir al usar el único archivo DB? –

+2

Planeo reemplazar un Oracle DB con SQLite. Miles de transacciones a lo largo del día y me temo que leer y escribir un solo archivo ralentizará el proceso. De todos modos parece que SQLite no será la mejor opción para manejar una base de datos tan grande. – thameera

Respuesta

5

Si no necesita una unión entre estas tablas, puede dividir manualmente la base de datos y decir qué tablas están en qué DB (= archivo).

No creo que sea posible dejar que SQLite divida su base de datos en varios archivos, porque se conecta a un DB indicando el nombre del archivo.

+0

No se puede permitir tener tablas como diferentes bases de datos. Además, el número máximo de bases de datos adjuntas está limitado a 62 en SQLite. :( – thameera

2

Los archivos de base de datos SQLite pueden crecer bastante sin penalizaciones en el rendimiento.

Las cosas que podrían degradar el rendimiento son:

  • de bloqueo de archivos contención
  • tamaño de la tabla (si se utiliza índices y emitir consultas de escritura)

Además, de forma predeterminada, SQLite limita la number of attached databases to 10.

De todos modos, try partition your tables. Verás que SQLite puede crecer enormemente de esta manera.

+0

Por lo que yo entiendo de la publicación vinculada, el concepto de partición es auto-implementado. SQLite no tiene soporte de particiones incorporado como algunos otros RDBMS. ¿Correcto? –

10

La pregunta tiene unos tres años pero llegué aquí cuando busqué la misma pregunta. Tarde descubrí, que es posible:

Uso

sqlite3.exe MainDB.db

ATTACH DATABASE 'SomeTableFile.db' AS stf;

Acceso a la tabla de la base de datos de otro archivo

SELECT * FROM stf.SomeTable;

Incluso puede unirse a varios archivos

SELECT * 
FROM MainTable mt 
JOIN stf.SomeTable st 
ON (mt.id = st.mt_id); 

https://www.sqlite.org/lang_attach.html

tameera dijo que hay un límite de 62 bases de datos asociadas, pero nunca llegué a ese límite, así que no puedo confirmar que.

La gran ventaja, además de algunos casos especiales, es que limita la fragmentación en los archivos de la base de datos y puede usar el comando VACUUM por separado en cada tabla.

+2

Aparentemente hay un interruptor de límite para limitar el número de bases de datos que se pueden unir a una conexión 'SQLITE_LIMIT_ATTACHED'. ¿Quizás Tameera alcanzó ese límite en la prueba? – Sampath

Cuestiones relacionadas