¿Puede compartir sus ideas sobre cómo implementar versiones de datos en PostgreSQL? (He hecho una pregunta similar con respecto a Cassandra y MongoDB. Si tiene alguna idea de qué db es mejor, comparta)Formas de implementar versiones de datos en PostreSQL
Supongamos que necesito versionar registros en una libreta de direcciones simple. Los registros de la libreta de direcciones se almacenan en una tabla sin relaciones por simplicidad. Espero que la historia:
- se utiliza con poca frecuencia
- serán utilizados a la vez para presentarlo en forma de "máquina del tiempo"
- no habrá más versiones que pocos cientos a unos registro único
- el historial no caducará.
estoy considerando los siguientes enfoques:
Crear una nueva tabla de objetos para almacenar la historia de los registros con una copia del esquema de la tabla de direcciones y agregar marca de tiempo y la clave externa para hacer frente a mesa de libros.
crear una especie de esquema menos tabla para almacenar los cambios para hacer frente a los registros de libros. Dicha tabla consistiría en: AddressBookId, TimeStamp, FieldName, Value. De esta manera, solo almacenaría cambios en los registros y no tendría que mantener la tabla de historial y la libreta de direcciones en sincronización.
Crear una tabla para almacenar seralized (JSON) registros de la libreta de direcciones o cambios para hacer frente a los registros de libros. Tal tabla se vería de la siguiente manera: AddressBookId, TimeStamp, Object (varchar). De nuevo, este es el esquema menos, así que no tendría que mantener sincronizada la tabla de historial con la tabla de la libreta de direcciones. (This is modelled after Simple Document Versioning with CouchDB)
¿No agregaría una sobrecarga adicional a mi mesa principal? Creo que rara vez se utilizará la historia y no quiero pagarla cuando no se utilice. Espero manejar alrededor de 100 GB de datos en la tabla de la libreta de direcciones. –
Verionning registros sin gastos generales es utópico. Oracle mantiene muchas versiones de un registro usando los campos 'start_date' y' end_date'. Los agregaría a todas las tablas que quieras tener versionado. –
No estoy seguro de por qué piensas que es utópico. Si divide la tabla en datos actuales e históricos obtendrá los beneficios del control de versiones casi sin costo si no se usa –