2009-10-07 29 views
8

Por diseño, Core Data no emite un VACUUM comando SQL a sus bases de datos SQLite, como detailed here. Estoy creando una aplicación Core Data que almacenará, y luego eliminará, archivos binarios grandes (2-10MB de tamaño) en una base de datos SQLite. Con el tiempo esto llevará a una fragmentación y una base de datos SQLite más grande de lo necesario. Me gustaría emitir periódicamente un comando VACUUM, por ejemplo, durante una operación de limpieza que ejecuto.Cómo VACUUM un Core Data SQLite db?

  • ¿Cómo puedo emitir proactivamente un comando VACUUM a las tiendas SQLite de Core Data?
  • ¿Es posible hacer esto a través de Core Data, o debo montar el SQLite db y conectarme directamente a él para ejecutar el VACUUM SQL?

Respuesta

11

La forma compatible de ello, en OS X 10.6/iOS 3.0 y versiones posteriores, es establecer la NSSQLiteManualVacuumOption en las opciones cuando se agrega la tienda para el coordinador almacén persistente.

+0

Gracias Jim! Supongo que esto no funciona en 10.5, ¿correcto? –

2

Sí, vacuum es una declaración SQL reconocida en SQLite. Se puede usar como una consulta normal, or so it says.

Sin embargo, tenga en cuenta que puede llevar a lecturas excesivas del sistema de archivos y escribe — el cuello de botella de prácticamente cualquier sistema — sin mencionar la fragmentación del sistema de archivos del servidor en servidores Windows.

+0

La pregunta es cómo ejecutarlo a través de Core Data, no si existe. – OrangeDog