2011-10-07 41 views
12

Una vez hecho el almacenamiento de todos mis datos en sqlite, alcanza los 14 MB ya. Es por eso que me temo que algunas personas no pueden descargar mi aplicación del área de conexión lenta. ¿Hay alguna manera de reducir la base de datos sqlite?cómo reducir la base de datos sqlite?

Respuesta

19

¿Usted ha intentado VACUUM?

El comando VACUUM reconstruye toda la base de datos. Hay varias razones que una aplicación pueda hacer esto:

  • A menos SQLite se ejecuta en modo "auto_vacuum = FULL", cuando se elimina una gran cantidad de datos desde el archivo de base deja tras de sí un espacio vacío, o "libre" páginas de base de datos. Esto significa que el archivo de la base de datos puede ser más grande de lo estrictamente necesario. La ejecución de VACUUM para reconstruir la base de datos recupera este espacio y reduce el tamaño del archivo de base de datos.
  • inserciones frecuentes, actualizaciones y eliminaciones pueden hacer que el archivo de base de datos se fragmente - donde los datos de una sola tabla o índice se encuentran dispersos en todo el archivo de base de datos. La ejecución de VACUUM garantiza que cada tabla e índice se almacene en gran medida de forma contigua en el archivo de la base de datos. En algunos casos, vacío también puede reducir el número de páginas parcialmente llenos en la base de datos, lo que reduce el tamaño del archivo de base de datos más ...

comando funciona el vacío copiando el contenido de la base de datos en una base de datos temporal archivo y luego sobrescribir el original con el contenido del archivo temporal. Al sobreescribir el original, se utiliza un diario rollback o archivo WAL write-ahead log, tal como lo haría con cualquier otra transacción de base de datos. Esto significa que cuando la aspiradora una base de datos, se requiere tanto como dos veces el tamaño del archivo de base de datos original en el espacio libre en el disco ...

+0

¿Cómo ejecutar este comando? –

+1

@ElgsQianChen - Sugeriría hacerlo como una declaración de SQL. –

+0

Gracias, funciona. Me perdí el punto y coma de cola cuando hice esta pregunta. –

1

que he tenido una experiencia con sqlite donde me importó alrededor de 3 MB de datos, después de lo cual me di cuenta de que los datos se codifica problemas. Solté la tabla, volví a crearla y volví a importar los datos después de solucionar los problemas de codificación. Resultado: un archivo sqlite de 6 mb. Mi solución fue eliminar el sqlite db y simplemente crear uno nuevo. (Sin más detalles sobre lo que está almacenando en su base de datos, esto es todo lo que puedo ofrecer ...)

+0

¿cómo es que 3MB a 6MB después de solucionar el problema de codificación? – ppshein

+0

La base de datos vacía después de colocar la tabla inicial de 3mb se mantuvo en 3mb y agregar datos nuevos agregó otros 3. – bdares

8

algunos consejos:

  • SQLite es un poco vago para reclamar espacio no utilizado; use el comando VACUUM o auto vacuum mode.

  • la eficiencia oficios formato datbase espacio para un acceso rápido. si solo descarga los contenidos de datos, ya sea como volcado de SQL o simplemente como un archivo CVS para cada tabla de base de datos, es probable que obtenga archivos más pequeños.

  • ya sea usando archivos Databse o datos de fricción, tratar comprimirlos.

1

14mb es muy grande para una aplicación para Android aún así, es mejor si se puede organizar para que pueda ser descargado desde un servidor de e integrado en la aplicación.

En su lugar, puede agrupar la aplicación con el archivo de base de datos comprimido (es decir, un archivo .zip) y descomprimirlo cuando la aplicación se ejecuta por primera vez (recordando eliminar el archivo .zip). Lo mejor es hacer todo esto en una tarjeta SD.

+0

¿Puede proporcionarme (enlaces o codificación) cómo comprimir y descomprimir el archivo DB cuando la aplicación se ejecuta por primera vez? – ppshein

+1

Aprendí a hacer esto desde los documentos de Android. Una búsqueda en Google, o una búsqueda aquí, le ofrece http://stackoverflow.com/questions/3382996/how-to-unzip-files-programmatically-in-android – SK9

2

Trate de cremallera y usarlo zipinput corriente al desempacar su base de datos de activos.De todos modos, Android zip su base de datos de 14 MB cuando cree su apk de todos modos (que se descomprimirá durante la instalación), así que supongo que su apk tendrá un tamaño de 5-6 mb.

+1

¿Android se comprime automáticamente al crear/exportar un archivo apk? – ppshein

+0

ya lo hace. mi aplicación tenía una base de datos de 12 MB en activos. Al crear un apk, el tamaño del archivo apj = k era solo 4mb. Creo que incluso puedo reducirlo aún más si uso archivos zip dentro de los activos. – rDroid

0

14MB no es tan grande para una aplicación hoy en día. Otra cosa que puedes probar es eliminar índices innecesarios de tablas. Algunos índices pueden estar al acecho en sus tablas, y pueden ocupar mucho espacio. Es posible que deba hacer sus consultas de manera diferente.

+1

O puede reconstruirlos en el primer inicio de la aplicación. – xryl669

Cuestiones relacionadas