Puede que conozcas Couchbase como la plataforma NoSQL más rápida y escalable disponible. Sin embargo, ¿sabías que Couchbase también puede ser una base de datos relacional? Couchbase es una plataforma de datos que puede operar con múltiples personalidades simultáneas en la misma plataforma. Puede ser estructurada o no estructurada. Y puede ser transaccional o analítica. En este blog, vamos a ver cómo mover datos de Oracle a Couchbase.
Fuente Base de datos Oracle
Para una base de datos fuente, vamos a utilizar Swingbench. Se trata de un generador de cargas de trabajo sintéticas para Oracle. Es autónomo y crea esquemas que recuerdan a lo que podría encontrarse en una aplicación de producción real. Para este blog, vamos a utilizar el esquema Simple Order Entry (SOE) creado por la utilidad. A continuación se muestra una representación visual del esquema SOE. Generando el esquema con un parámetro de escala de 1 da como resultado un conjunto de datos con unos 15 millones de registros.
Importación de datos
Para migrar los datos de Oracle a Couchbase, utilizaremos el método cbperf herramienta de demostración. Esta utilidad genera principalmente esquemas sintéticos aleatorios para Couchbase, pero también puede importar datos a Couchbase a través de un plugin desde fuentes de datos externas. El plugin de Oracle para cbperf replicará todas las tablas disponibles para el usuario que se conecta, copiará los datos de las tablas asociadas, y para cada tabla, extraerá las columnas que están indexadas para recrear los índices en Couchbase.
1 |
% papelera/cb_perf importar -h cbhost -b soe -s soe -P oracle -V conecte=soe/soe@orahost/testdb |
Suponiendo que el esquema SOE se configuró con el nombre de usuario y la contraseña por defecto, que es soe y soerespectivamente, esta sintaxis exportará los datos de la base de datos SID testdb en el host orahost e importarlo al bucket de Couchbase soe con alcance soe donde un nodo del cluster es cbhost.
Los datos en Couchbase
Quitemos por adelantado una importante advertencia. Para una aplicación de producción, probablemente no querrás simplemente "levantar y cambiar" los datos e índices. En su lugar, se necesita hacer un análisis para determinar la configuración óptima en Couchbase junto con los cambios requeridos en la aplicación. El nivel final de esfuerzo variará según la aplicación.
Dicho esto, una vez que el cbperf habrá unos 15 millones de documentos en Couchbase. El sitio soe scope tendrá colecciones que corresponden a cada tabla de Oracle.
Estas son las tablas en Oracle:
Estas son las colecciones en Couchbase:
Cada fila que estaba en la base de datos Oracle es ahora un documento en Couchbase. La clave del documento se construye a partir del nombre de la colección más dos puntos ":" más el número secuencial del documento (básicamente el número de fila). Las claves JSON del documento son los nombres de las columnas de la tabla, y los valores son los valores de las columnas para esa fila.
1 |
seleccione * de CLIENTES donde CUSTOMER_ID = 1 ; |
1 |
seleccione * de soe.soe.clientes donde customer_id = 1 ; |
Por último, podemos ver todos los índices que se generaron automáticamente a partir de las columnas indexadas en la base de datos Oracle. Para permitir la mayor flexibilidad de consulta, cada índice cubre una columna.
Ejecutar una consulta
Buscando en el código fuente de Swingbench, he encontrado la siguiente consulta:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SELECCIONE tt.total_pedido, tt.sales_rep_id, tt.fecha_pedido, clientes.cust_first_name, clientes.apellido_cliente DESDE (SELECCIONE total_pedidos, orders.sales_rep_id, pedidos.fecha_pedido, pedidos.customer_id, rango() En (Pida Por total_pedidos DESC) rango_sal DESDE pedidos DONDE orders.sales_rep_id = 1 ) tt, clientes DONDE tt.sal_rank <= 10 y customers.customer_id = tt.customer_id |
Ejecutando esta consulta contra la base de datos Oracle, obtengo los siguientes resultados:
Y ejecutando la consulta en Couchbase, obtengo los mismos resultados. Lo único que tuve que cambiar en la consulta fue anteponer a las colecciones el prefijo soe.soe. para construir un espacio de claves Couchbase.
Dato curioso
Es posible que conozca el ORACLE_SID como identificador de instancia de la base de datos Oracle, pero ¿sabe lo que hace en secreto? Representa el Identificador del emplazamiento. Se codifica con ORACLE_HOME para obtener una clave SGA (System Global Area) que es la clave de memoria compartida en los sistemas Unix/Linux. Cuando se obtiene una ORA-01034: ORACLE no disponible es porque esta clave de memoria compartida no está presente en el sistema. Por lo tanto no puedes comunicarte con la base de datos. Afortunadamente, trabajar con Couchbase es mucho más sencillo, permitiéndote centrarte en otras cosas. A menos, por supuesto, que te gusten las cosas internas del sistema operativo.
Conclusión
Aunque pueda parecer una tarea desalentadora, importar datos de una base de datos relacional a Couchbase no es tan difícil. Para ser justos, hay más que considerar que sólo columnas e índices, como procedimientos almacenados (funciones definidas por el usuario en Couchbase), pero es ciertamente muy factible.