Si tienes una base de datos construida usando MySQL, puede que te estés preguntando si, y lo que es más importante, cómo, esa base de datos (y tu aplicación) puede ser trasladada a Couchbase. El mayor escollo no son los aspectos técnicos de la creación de Couchbase o el almacenamiento de tu información (aunque son importantes), sino que se trata de ver tus datos de una manera diferente, y luego saber cómo eso cambia el funcionamiento de tu aplicación.
Vamos a empezar por ver cómo puedes convertir tu estructura de base de datos MySQL en Couchbase Server, y cómo la consulta de tu base de datos en Couchbase Server difiere de los métodos utilizados en MySQL.
Piense primero en la estructura de datos
MySQL (y otras bases de datos SQL y basadas en tablas) te obligan a pensar en tus datos en términos de tablas. Todos sus datos son una tabla, y cuando se almacenan estructuras complejas, un dato individual puede estar dividido en una o más tablas. Para algunas aplicaciones y tipos de datos, ésta es una forma perfectamente lógica y razonable de abordar y almacenar los datos. Pero para algunas aplicaciones, la estructura de tablas no se ajusta muy bien a los datos que se quieren almacenar.
Tomemos un ejemplo típico: una base de datos de recetas. Esto es algo que conozco bien, ya que Cheffy.com está construido sobre MySQL. La estructura básica de las tablas es una tabla central, llamada receta, que contiene el nombre de la receta, el subtítulo, la descripción y las raciones. Otra información relevante sobre la receta, como la lista de ingredientes, los pasos del método, los metadatos y las palabras clave, se almacena en otras tablas, vinculadas a la receta original mediante un ID de receta único. Puede ver esto, muy básicamente, en la siguiente figura.
???
Esta estructura tiene algunas ventajas potenciales: algunas operaciones, por ejemplo, pueden ser muy sencillas y fáciles. Por ejemplo, ¿desea encontrar todas las recetas que contienen el ingrediente "zanahoria"? Puede realizar una consulta en la tabla de ingredientes buscando "zanahoria" y, a partir de ahí, obtener una lista de recetas coincidentes. Mediante el uso de uniones, puede obtener una lista de las recetas, su título y otra información de la tabla de recetas, buscando en la tabla de ingredientes, utilizando la unión para conectar el ID de la receta en la tabla de ingredientes con el ID de la receta en el título de la receta.
???
Mientras que este tipo de búsqueda es fácil, recopilar toda la información sobre una receta, por ejemplo cuando se quiere mostrar la receta al usuario, puede ser realmente complicado. Podrías hacerlo con una sola consulta, pero a veces puede ser más fácil hacerlo con varias consultas, una para obtener los datos de la receta, otra para los ingredientes, otra para los metadatos, etc. Dentro de la capa de aplicación, esto se hace automáticamente para construir un objeto, que luego se utiliza como base para mostrar la receta al usuario de una manera formateada.
Para muchos usuarios y aplicaciones, o bien se construye una capa especial para hacer esto, o bien se utiliza uno de los muchos sistemas de mapeo objeto-relacional para mapear los datos desde la estructura tabular subyacente, al objeto de nivel superior con el que la aplicación (y el usuario) están familiarizados. Las recetas son un ejemplo, pero se extiende a una amplia variedad de otras aplicaciones, como la facturación (factura, proveedor, destino, líneas de factura) y las entradas de blog (contenido de la entrada, palabras clave, creador, comentarios).
Estas soluciones basadas en tablas no son intrínsecamente malas, pero en este tipo de situaciones, la información clave se almacena en varias tablas, lo que implica mantenerlas sincronizadas entre sí. Por ejemplo, ¿qué ocurre cuando se elimina un registro? Hay que borrar todos los demás registros que puedan estar vinculados al original, ya sea manualmente o mediante borrados en cascada.) Del mismo modo, cuando se trata de cargar la información sobre una receta, acabas ejecutando entre 5 y 10 consultas de la información juntas.
Couchbase adopta un enfoque diferente. En lugar de múltiples tablas en las que puedes almacenar diferentes piezas de información, en Couchbase almacenas una única estructura (en formato JavaScript Object Notation JSON). El formato JSON permite una estructura compleja de campos, arrays, objetos y tipos escalares, que pueden ser combinados juntos en un registro completo. Esto significa que ahora puede representar su antigua entidad de múltiples tablas (receta, entrada de blog) como un único "documento".
"title" : "Sopa de zanahoria y cilantro"
"raciones" : 4,
"subtítulo" : "Delicioso con pan integral",
"preptime" : 8,
"cooktime" : 12,
"totaltime" : 20,
"ingredientes" : [
{
"cantidad" : 250,
"ingrediente" : "Zanahorias",
"medida" : "g"
},
{
"cantidad" : 75,
"ingrediente" : "cilantro",
"medida" : "g"
},
{
"cantidad" : 250,
"ingrediente" : "caldo vegetal",
"medida" : "ml"
}
],
"método" : [
"Cortar zanahorias",
"Cocinar todos los ingredientes en la sartén",
"Liquidar"
}
],
}
Ahora todo lo que tiene que ver con su receta está en un solo lugar, y podemos cargar la receta en una sola operación desde su base de datos Couchbase.
No hay estructura o definición para el contenido; cualquier documento en una base de datos Couchbase puede contener cualquier cosa y cualquier estructura. Sin embargo, puedes aplicar una rutina de validación que compruebe que la estructura del documento suministrado a la base de datos. La validación puede cubrir tanto los campos como su contenido.
Además, hay que tener en cuenta que, al no existir una estructura estricta, hay más flexibilidad a la hora de almacenar la información. Añadir una nueva sección al documento de la receta que contenga información sobre quién suministró la receta a la base de datos es un caso de ampliación de la estructura del documento.
Tampoco existe la noción de tablas múltiples. Sólo existe la base de datos y los documentos que contiene. Si desea admitir distintos tipos de información dentro de la misma base de datos, puede añadir un campo al documento. Por ejemplo, para identificar una receta se podría hacer:
"tipo" : "receta",
"title" : "Sopa de zanahoria y cilantro"
"raciones" : 4,
"subtítulo" : "Delicioso con pan integral",
…
}
La identificación del tipo de registro puede utilizarse en otras áreas del sistema de base de datos para ayudarle a reconocer (y seleccionar) los datos que está cargando.
Si todo es un documento, ¿cómo obtengo una lista de registros?
En la primera sección hablé de cómo con MySQL se puede construir una simple sentencia SQL para obtener una lista de recetas que incluyan zanahorias. En MySQL esto funciona buscando valores en la tabla de ingredientes para encontrar los IDs de las recetas, y luego usar un join para obtener los títulos de las recetas de la tabla de recetas. Para aumentar la velocidad, normalmente se utilizaría un índice para mejorar los tiempos de respuesta de la consulta y evitar tener que buscar individualmente en cada registro.
En Couchbase todo es un documento, y no hay ningún método incorporado para buscar en el campo de una tabla, ya que tampoco hay campos ni tablas. Como no hay una estructura rígida (y no hay forma de que el motor de base de datos identifique los campos en un documento de forma libre), ¿cómo hacemos cualquier operación que normalmente opera sobre una lista (o tabla)? Todo, desde un simple 'listar todas las recetas' hasta 'encontrar todas las recetas con un ingrediente de zanahoria', depende del uso de una lista en algún lugar.
Couchbase soporta una construcción llamada vista. Las vistas son similares en principio a las vistas dentro de MySQL, excepto que en Couchbase, las vistas son la única manera de obtener listas de documentos de tu base de datos, no un método de obtener una alternativa .
De hecho, un punto de vista define tres cosas:
- La estructura de la información incluida en la vista. Puede pensar en esto como la definición de la estructura de la tabla, al igual que definiría una tabla dentro de MySQL.
- Los campos o información en los que se puede buscar. Una vista produce dos elementos, una clave y un valor. Las claves constituyen el método mediante el cual se puede buscar, o más concretamente, seleccionar, el contenido de la base de datos que se desee.
- Un índice sobre la estructura y las claves. El índice se utiliza para mejorar la búsqueda de los datos notificados en la vista.
Las vistas se definen dentro de un documento de diseño, en JavaScript, mediante una función que acepta un documento. Cuando se construye la vista, cada documento de la base de datos se suministra a la vista, y la vista entonces emite la información que usted quiere que aparezca en la salida. No te preocupes por el JavaScript, el JavaScript se ejecuta en el servidor, no en el cliente.
Así que, volviendo a MySQL por un momento, una consulta (sin una cláusula WHERE), selecciona los campos a devolver la salida de la consulta, y construye una lista de filas coincidentes en la salida. Así, mirando a una sentencia SQL:

Cuando se ejecuta una consulta en MySQL, el servidor MySQL toma la información en la tabla o tablas, y luego construye la lista de registros (y los campos correspondientes) para ser devueltos, así:

En Couchbase, las vistas construyen una lista de registros a partir de la información individual de los documentos, creando un índice como efecto secundario de ese proceso. El resultado es una lista de todos los documentos generados por la vista.

???
En MySQL, cuando se ejecuta una consulta con una cláusula WHERE, el índice (con suerte) se utiliza para ayudar a seleccionar los registros que desea elegir:
???

En Couchbase, la vista generada es tu tabla, y cuando consultas la vista, Couchbase utiliza los valores clave (y el índice asociado que se generó), con los valores de consulta que especifiques filtrando la información devuelta para generar la lista final de registros coincidentes.

Este método de especificar las tablas que desea consultar le permite simplificar y optimizar la forma de extraer información de la base de datos. Pero también significa que tienes que pensar más detenidamente cómo quieres consultar la información.
La próxima vez
Ahora sabes cómo MySQL almacena y consulta información, y cómo ese conocimiento puede ser traducido cuando migras información a Couchbase Server 2.0. La próxima vez, empezaremos a construir algunas consultas basadas en lo que hemos aprendido, y empezaremos a ver consultas más avanzadas y el proceso de migración.
Hola,
1. ¿es posible conectarse a una base de datos Mysql mientras se trabaja con CouchBase desde una aplicación java?
2. ¿es posible demostrar la escalabilidad de CouchBase en un único sistema?
En #1, es definitivamente posible conectarse a MySQL y Couchbase simultáneamente, sin problemas.
En #2, generalmente sí. Couchbase tiene muchos beneficios sobre otros tipos de bases de datos (tanto SQL como otras NoSQL) cuando se despliega en un sistema distribuido, pero incluso algunos de los aspectos en torno a la gestión de la memoria, incluyendo la caché, muestran activamente beneficios de escalabilidad en un solo sistema.
Hola,
El motivo de mi pregunta es que estamos estudiando la posibilidad de migrar los registros del portal de una universidad de Mysql a Cauchbase después de mi tesis. Así que quieren que demuestre de forma práctica, la escalabilidad en un sistema único o distribuido. ¿Tienes algún documento o enlace que explica la gestión de la memoria en un sistema único que usted dijo en su puesto.
gracias
Ok. aparte de instalar cauchbase server y jdk, que entorno puedo usar para desarrollar un programa java GUI que pueda hacer dicha migración. Soy un novato en java pero con mucha pasión por esta implementación. Por favor ayudenme con alguna guia
Hola,
gracias por su respuesta. la razon por la que pregunto es
Estamos estudiando la posibilidad de migrar el portal de una universidad.
registros de Mysql a Cauchbase después de mi tesis. Así que quieren que
demostrar de forma práctica la escalabilidad en un sistema único o distribuido.
Tienes algún paper o link que explique la gestión de memoria en un
sistema único que has dicho en tu post.
gracias
Como has comentado antes con Matt, puedes conectar tu programa Java a MySQL y Couchbase al mismo tiempo.
Couchbase dispone ahora de una integración con Talend ( https://www.couchbase.com/press... ). Talend es un ETL (Extract Transform Load) que le permitirá diseñar gráficamente el flujo para mover sus datos de MySQL a Couchbase.
El equipo de Couchbase está trabajando actualmente en un tutorial que muestra exactamente eso, permanece atento.
¿Se conserva el índice? ¿Cuál es el ciclo de vida de la vista y de su índice?
Si se añaden nuevos documentos después de construir la vista, ¿se añaden también al índice, o se crea el índice para una única "consulta" y luego se descarta?
¿Cómo se denomina en Couchbase una consulta (frente a una vista o un índice)?
¿Se crea una vista de base de sofá una vez al arrancar?
¿Es lo mismo una vista de couchbase que un mapa?