Réplica de datos en tiempo real desde Oracle a Couchbase con GoldenGate

English

A menudo los datos de las organizaciones se encuentran en distintos repositorios o sistemas de información. Imaginemos un Catálogo de Productos. Como ejemplo, supongamos que los datos maestros se encuentran en una base de datos Oracle, dando servicio a aplicaciones de logística, aprovisionamiento, control de existencias y otros sistemas de back-end.

Por otro lado, consideremos un portal web que actúa de frontal para nuestros clientes finales. Esta aplicación tendrá un gran número de clientes concurrentes, y para dar la mejor experiencia de usuario necesitaremos de un excelente rendimiento en el acceso al Catálogo de Productos.

Este es un caso de uso típico de Couchbase. Gracias al cache incluido en Couchbase conseguiremos un excelente rendimiento en el acceso a datos, y podremos escalar nuestro sistema con un coste y esfuerzo mucho menores. Además, es frecuente utilizar Couchbase en este tipo de escenarios para almacenar perfiles de usuarios, sesiones de aplicación o como una capa de consolidación para otras fuentes de datos.

En este punto, tenemos los datos de nuestro catálogo de productos replicados en dos almacenamientos: Oracle y Couchbase. Al hacer la carga inicial de datos, nuestro catálogo esta sincronizado con la base de datos origen, y los datos son consistentes.

Ahora se produce una escritura en la base de datos Oracle de origen. Puede ser que se añada un nuevo producto, o cambie el precio de un determinado producto. ¿Cómo aseguramos que este cambio se propague a Couchbase para seguir manteniendo la consistencia?

Esto es precisamente lo que hace Oracle GoldenGate: recoge transacciones ejecutadas sobre una base de datos Oracle y las propaga a otro almacén de datos. Aunque en estos momentos Couchbase no es una base de datos soportada de forma nativa por Oracle GoldenGate,  podemos utilizar el Adaptador Oracle GoldenGate para Java para hacer la integración entre ambos extremos.

cb_ggadapter

Algunos aspectos a considerar:

Modelado de Datos. Oracle es una base de datos relacional, con datos estructurados en tablas, filas y columnas. Por otro lado, Couchbase es una base de datos documental, que almacena documentos en formato JSON. Estos documentos no tienen un esquema o estructura predefinida. A menudo los documentos en Couchbase contienen datos referenciados en el mismo documento. Así se consigue evitar queries con joins y se mejora el rendimiento y la sencillez.

Carga de datos. El primer paso será hacer una carga inicial de datos desde Oracle a Couchbase. A partir de aquí podremos activar la propagación de cambios desde Oracle hacia Couchbase.

Es siguiente paso es desarrollar el adaptador. En este repositorio github se puede encontrar una implementación de ejemplo. En el mismo se encuentra el código del mismo, una versión compilada del adaptador lista para desplegar y una utilidad para hacer la carga inicial desde Oracle.

Las instrucciones detalladas se pueden encontrar en este repositorio. En resumen, los pasos son los siguientes:

  1. Hacer la carga inicial desde Oracle a Couchbase
  2. Instalar GoldenGate en las máquinas origen y destino
  3. Configurar la base de datos Oracle de origen
  4. Instalar el adaptador: CouchbaseGoldenGateAdapter
  5. Configurar los procesos de GoldenGate: extract, pump y replicat
  6. Arrancar los procesos de GoldenGate

En este punto, para probar la replicación podemos utilizar Oracle SQLPlus y Couchbase cbq como clientes SQL. En este ejemplo utilizamos el esquema HR, incluido como ejemplo en todas las bases de datos Oracle, y que simula un departamento de Recursos Humanos. Empecemos por un INSERT.

Vamos a insertar una fila en la tabla “regions”, con “region_id=5”. Comprobamos antes que este registro no está presente en Oracle y tampoco en Couchbase:

(Oracle SQLPlus)

before5

(Couchbase cbq)

before5_cb

Ahora hacemos el insert desde Oracle SQLPlus, seguido de un commit.

after5

Comprobamos que el documento se ha propagado a Couchbase:

after5_cb

Así que aquí lo tenemos; GoldenGate replicando transacciones Oracle a Couchbase. Se pueden comprobar también otras sentencias de escritura como DELETE y UPDATE. ¡Feliz sincronización!