Versiones de bases de datos SQLite con Subversion. Buena idea o mala idea?

Así que tengo un sistema web en el que cada usuario obtiene una database SQLite separada que actúa como una especie de espacio de trabajo. Todos los files de la database se encuentran en un directory con nombres de bases de datos que coinciden con los ID del usuario.

Muchas de estas bases de datos se crean y rara vez se editan. Otros tienen muchas ediciones a diario.

Para administrar copys de security en este directory, ¿recomendaría usar la configuration de Subversion con un process cron ? Una de las razones por las que estoy considerando este enfoque es que permitiría a los usuarios deshacer fácilmente su espacio de trabajo editado.

Si puede ejecutar sus propios scripts de shell, puede volcar cada database en un file SQL simple:

# sqlite3 user.db .dump .exit > user.sql

y luego puedes almacenar el file SQL en el repository de Subversion

Crear una database desde un file SQL:

# sqlite3 -init user.sql user.db .exit

Muchas de estas bases de datos se crean y rara vez se editan.

Si este es el caso, entonces no obtendrás muchos beneficios de Subversion. Es un sistema de control de versiones, no un sistema de respaldo. No querrás hacer operaciones de control de versiones como diff, merge, etc. en los objects, así que creo que obtendrás un mayor performance de un método de copy de security tradicional. Comprima los files sqlite (tanto como pueda) y archívelos durante un período de time especificado. Si está ejecutando esto en un sistema Linux, puede ver los scripts de copy de security como los scripts de logrotate que hacen lo mismo para los loggings del sistema. Dado que las bases de datos sqlite son agradables y están bien empaquetadas en un único file, la restauración de una versión anterior se puede crear fácilmente (simplemente descomprímalo y cópielo en la location correcta).

Según la cantidad de datos que cada usuario almacena en su database, una alternativa adicional es mantener copys ocultas de las tablas en su repository. Cuando se realiza un cambio, se realiza una copy de la tabla anterior antes de que se modifique. De esta forma, puede conservar una copy de las revisiones anteriores (o incluso las últimas) en la database y puede restaurarlas con una operación de database simple en lugar de tener que ir a search copys de security antiguas. Esto también le permite revertir cambios a parte de la database sin revertir todo.

Una cosa que podrías hacer es:
* Siempre exporta tu database a un file sql en time de desarrollo.
* Convierta el file sql a file de database en una tarea personalizada de MSBuild o en cualquier paso de initialization conveniente cuando se inicia la aplicación.
* Para volver a importar el file sql en un file de database, puede usar C # similar a:

  string sql = System.IO.File.ReadAllText(SqlFile); SQLiteConnection.CreateFile(DatabaseFile); string ConnectionString = @"Data Source=" + DatabaseFile; using (SQLiteConnection cn = new SQLiteConnection(ConnectionString)) { using (SQLiteCommand cmd = new SQLiteCommand(sql, cn)) { cn.Open(); cmd.ExecuteNonQuery(); }//cmd }//cn 

De esta forma, puede mantener sus files sql en SVN, lo que le permite tener files editables y fusionables y simplemente generar sus files bin db sobre la marcha, ya sea en el process de compilation o cuando se inicia la aplicación.

Si elige build el file binary db en el inicio de la aplicación, también puede convertirlo en una database en memory en caso de que su aplicación no tenga suficientes permissions para escribir en el disco. su cadena de connection debería ser:

Fuente de datos =: memory:; Versión = 3; Nuevo = Verdadero;

¿Los files de la database SQLite son files de text claro o binarys? Si son binarys, no creo que se beneficie al usar Subversion tanto (ya que en mi humilde opinión no debería usarse como un sistema de respaldo).

En cambio, si desea permitirles restaurar una versión anterior, utilice un mecanismo de copy de security normal (rsync o similar) y guarde una copy de security diaria durante un período de time determinado (según sus requisitos reales). Si quieren restaurar una versión anterior, pueden acercarse a ti y volver a reproducirla.