Sincronizar datos con el DSTIME
¡Hola Comunidad!
Para la sincronización de datos dentro de Caché/IRIS, existen varias formas de sincronizar objetos y tablas. A nivel de la base de datos se puede usar Shadowing o Mirroring
Esto funciona perfectamente, y si solo necesitas sincronizar una parte de tus datos, puedes partir tus datos en conjuntos más pequeños usando Global mapping. O, si necesitas sincronización bidireccional a nivel de clase/tabla, puedes usar la herramienta Object Synchronization.
El único límite de todos estos métodos es que sólo funcionan desde Caché/IRIS hacia Caché/IRIS. Si quieres sincronizar tus datos a alguna base de datos externa, necesitas alguna otra solución.
La solución está disponible en Caché/IRIS desde hace ya bastante y funciona a la perfección.
El global ^OBJ.DSTIME es el que hace posible la magia.
Fue creado para permitir la sincronización de datos con DeepSee. Lleva un registro muy simple de los cambios en Objetos/Tablas mediante la señalización de Modified,New,Deleted
Esto podría ser útil no solo para DeepSee, sino también para cualquier otro tipo de sincronización de datos.
El Global ^OBJ.DSTIME tiene dos funcionalidades adicionales:
- Está envuelto en una clase persistente %SYSTEM.DSTIME, por lo que se puede usar como una tabla SQL normal, para seleccionar los cambios que haga
- Mantiene un ID de versión (llamado DSTIME) que permite controlar los residuos sincronizados. Lo que hace exactamente es:
- Toma el ID relativo a la última versión
- Lo incrementa
- y luego carga tus cambios donde los necesite, en base a la versión recuperada
Y a medida que haces la sincronización mediante SQL puro, tu objetivo puede ser cualquier base de datos que entienda SQL.
Extendí la clase %SYSTEM.DSTIME y coloqué un ejemplo en Open Exchange para probarlo en en el namespace SAMPLES.