Implementando control de versiones / manipulación paralela segura de datos para una base de código existente

En el trabajo tenemos la siguiente situación:

  • Una aplicación de escritorio que gestiona y transforma datos de una estructura de datos (una estructura de datos por proyecto)
  • Una database como mecanismo central de persistencia para save y cargar los datos de un proyecto
  • Una estructura de datos similar a un tree que consiste en diferentes types de nodos que contienen diferentes types de datos

La aplicación hace lo que se supone que debe hacer, pero queremos implementar algunas características que aseguren la queueboración en un proyecto. El problema principal es evitar que los usuarios realicen cambios en los datos que ya han sido alterados desde una computadora diferente y empujados a la database. Necesitamos un sistema que funcione para nuestra estructura de datos de la misma manera que funciona para las bases de código de control de versiones o los files de text simple para los autores de un libro. Lo que significa que tiene que search inteligentemente, si los datos han cambiado en el lado de la persistencia y proporcionar algún mecanismo para que el usuario decida si sus cambios en la estructura de datos están bien en el context de los datos que se han alterado mientras tanto.

Simplemente bloquear el acceso a la database para cambios que se realizan al mismo time no impide que diferentes usuarios alteren los mismos datos (si el usuario A altera el Nodo 1 y el usuario B altera el Nodo 1 inmediatamente después sin get cambios y revisar su trabajo, el Nodo 1 podría entrar en un estado que corrompe toda la estructura de datos).

Es probable que search cambios en la database sea realmente lento, ya que toda la estructura de datos debe compararse con la que se carga localmente, cada vez que un usuario desee realizar cambios destructivos e insertlos en la database. Destructivo como en cualquier operación que altera la estructura de datos al agregar nuevos nodos o al alterar / eliminar los existentes.

Estaba pensando en usar Git como un mecanismo de persistencia, guardando nuestra estructura de datos en un formatting como JSON o XML. Luego, podríamos verificar si la versión almacenada de forma remota tiene un número de revisión más reciente y obligar al usuario a extraer, fusionar y revisar los cambios antes de enviar su trabajo. Y podríamos revertir, si algo va mal en algún lugar en el path.

Asi que aqui están mis preguntas:

  1. ¿Alguien ha usado alguna vez un sistema de control de versiones como mecanismo central de persistencia para una aplicación? Funciona bien?

  2. ¿Hay algún marco de control de versiones que pueda facilitar la implementación? (Estamos usando C ++ con Qt)

  3. ¿Puedes pensar en un mejor enfoque que usar Git? ¿Preferiblemente algo que nos permita mantener nuestro mecanismo de persistencia de la database existente?


Editar:

// Example of the datastructure (Pseudo-Code) // The nodes in our real application are a lot more complex // and contain different kinds of data class Node: addNode(node) removeNode(node) class TextNode(Node): getText() setText(text) toUpperCase() class NumberNode(Node): getNumber() setNumber(number) multiplyWith(number)