Simba Couchbase Driver y Couchbase Server 4.1

Nota: este artículo ha sido escrito por Mike Howard, de Simba Tecnologías.

N1QL DML

El soporte de manipulación de datos N1QL facilita la inserción, actualización y eliminación de datos JSON, sin la sobrecarga de tener que leer primero el documento. Estas sentencias N1QL pueden realizar una operación en todo un bucket con una única petición de red. Las consultas N1QL no están limitadas por el esquema, y por lo tanto pueden ser usadas para manipular datos fuera de las restricciones del esquema. Además, las consultas N1QL no están restringidas a una sola tabla, y son perfectas para manipular datos a través de múltiples tablas simultáneamente. El controlador Simba Couchbase le permite ejecutar estas consultas directamente a través del controlador.

INSERTAR

N1QL INSERT permite la inserción de un nuevo Documento JSON. Si bien este método podría utilizarse para la simple tarea de agregar una fila a una tabla existente, es particularmente útil cuando se agregan datos que no coinciden con un esquema existente. La posibilidad de añadir datos que no corresponden al esquema permite manipular el esquema: Añadir un documento de tipo existente con nuevos atributos, o añadir un documento de tipo nuevo para crear tablas nuevas. Y obtendrá nuevas columnas en el esquema. Sin embargo, tendrá que volver a muestrear la base de datos (mediante SQL) para ver cualquier dato nuevo no perteneciente al esquema.

Usando el cubo gamesim-sample como ejemplo, digamos que queremos añadir una característica "Jefes" a nuestro juego. Usa un N1QL INSERT para crear una tabla Bosses añadiendo un nuevo documento de tipo "boss":

INSERTAR EN gamesim-muestra (KEY, VALUE) VALUES ("Dragón Azul", {"type": "boss", "hitpoints": 70000})

Volver a muestrear con el controlador para crear una nueva tabla de jefe con esta información. Si decidimos ampliar nuestra tabla de jefes para incluir puntos de experiencia similares a los de la tabla de monstruos, podemos utilizar N1QL INSERT para insertar nuevos documentos en una tabla existente que no coincidan con el esquema actual de la tabla:

INSERTAR EN gamesim-muestra (KEY, VALUE) VALUES ("Grifo Dorado", {"type": "boss", "hitpoints": 80000, "experienceWhenKilled": 37000})

Como en el primer caso, este cambio de esquema no surtirá efecto hasta que se vuelva a muestrear la tabla. Sin embargo, los valores que coincidan con el esquema existente seguirán estando disponibles:

Tabla Boss después de INSERT antes de remuestrear

PK puntos de golpe
Dragón azul 70000
Grifo de Oro 80000

Tabla de jefes tras la remuestreo

PK puntos de golpe experienciaWhenKilled
Dragón azul 70000 NULL
Grifo de Oro 80000 37000

ACTUALIZACIÓN

Puedes usar N1QL UPDATE para modificar documentos JSON directamente. Al igual que SQL UPDATE, esta operación puede ser usada para modificar atributos individuales en una tabla, sin embargo el verdadero poder de UPDATE proviene de su alcance en todo el bucket. Usando N1QL UPDATE, puedes modificar cada documento coincidente en el bucket a través de una sola consulta - en una sola petición de red, sin tener que leer todos los datos primero.

He aquí un ejemplo: Actualizar un videojuego para aumentar los puntos de vida de todos los jugadores y monstruos en un multiplicador fijo. Normalmente, esto requeriría dos consultas: una para actualizar los jugadores y otra para los monstruos:

Tabla de jugadores antes de la ACTUALIZACIÓN

PK puntos de golpe
Aaron0 20210
Aaron1 23832
Aaron2 10
Aliaksey0 10

Tabla de monstruos antes de ACTUALIZAR

PK puntos de golpe
Bauchan0 3754
Bauchan1 3627
Bauchan2 4999
Bauchan3 4699
Bauchan4 3070

Pero con N1QL, podemos emitir una única actualización de todo el bucket para completar esta tarea:

ACTUALIZACIÓN gamesim-muestra SET hitpoints = hitpoints*2

Esta consulta duplica el valor de cada atributo hitpoints del bucket en una sola operación.

Tabla de jugadores tras la ACTUALIZACIÓN

PK puntos de golpe
Aaron0 40420
Aaron1 47664
Aaron2 20
Aliaksey0 20

Tabla de monstruos tras la actualización

PK puntos de golpe
Bauchan0 7508
Bauchan1 7254
Bauchan2 9998
Bauchan3 9398
Bauchan4 6140

BORRAR

N1QL delete elimina todos los documentos del bucket que coincidan con una condición especificada. Esto puede ser útil para realizar eliminaciones por lotes. Un ejemplo de operación podría ser la eliminación de una cervecería en el bucket de muestras de cerveza. Para eliminar una cervecería y todas las cervezas asociado con ella, podríamos emitir la siguiente consulta:

DELETE FROM muestra de cerveza WHERE name = "21st Amendment Brewery Cafe" OR brewery_id = "21st_amendment_brewery_cafe"

Esto elimina todos los datos relacionados con "21st Amendment Brewery Cafe" del bucket en una sola operación. Utilizando SQL esto requeriría tres consultas, una para eliminar la cervecería de la tabla brewery, una segunda para eliminar la dirección de la tabla brewery_address y una tercera para eliminar las cervezas asociadas a la cervecería de la tabla beer.

SQL DML

El Simba Couchbase Driver también le permite manipular tablas utilizando sintaxis SQL. Puede conectar su controlador Couchbase a través de ODBC o JDBC a herramientas de escritura basadas en SQL, como aplicaciones ETL. También le permite realizar consultas más fácilmente a nivel de tabla.

INSERTAR

SQL INSERT añade un documento a un bucket que coincide con el esquema de la tabla a la que se está añadiendo. A diferencia de N1QL, SQL INSERT aplicará activamente el esquema definido en el mapa de esquema. Para realizar operaciones de inserción que deban coincidir con el esquema actual, es preferible utilizar SQL INSERT, ya que evita la modificación accidental del esquema.

Para continuar con el ejemplo de la Tabla de Jefes, vamos a añadir un nuevo jefe a la tabla. Para empezar, emitimos el comando SQL:

INSERT INTO 'gamesim-sample'.boss (PK, hitpoints, experienceWhenKilled) VALUES ("Lobo Gris", 22000, 12000)

Esto añade la fila Wolf a la tabla Boss. Observe que no es necesario especificar el atributo type, ya que está implícito en el nombre de la tabla:

Tabla Boss después de SQL INSERT

PK Puntos de vida experienciaWhenKilled
Dragón azul 70000 NULL
Grifo de Oro 80000 37000
Lobo gris 22000 12000

ACTUALIZACIÓN

SQL UPDATE permite actualizar una única tabla. Esto es útil si desea restringir el alcance de la actualización a esa única tabla. Para las actualizaciones de tablas específicas, se prefiere SQL UPDATE a N1QL, ya que su ámbito restringido evita la modificación involuntaria de otros documentos.

Por ejemplo, imaginemos que queremos aumentar los puntos de golpe de los monstruos. Podemos hacerlo emitiendo el comando SQL UPDATE:

UPDATE 'gamesim-sample'.monster SET hitpoints=puntos-de-hit*1.5

Esto actualiza sólo los puntos de golpe del monstruo, dejando la tabla del jugador intacta.

Tabla de monstruos tras la actualización

PK puntos de golpe
Bauchan0 5631
Bauchan1 5440
Bauchan2 7498
Bauchan3 7048
Bauchan4 4605

BORRAR

SQL DELETE elimina una sola fila de una tabla. Similar a SQL UPDATE, esto es útil para limitar la operación a una sola tabla. Similar a insert y update, SQL DELETE es la operación preferida para eliminar documentos de una misma tabla, ya que evita la eliminación accidental de otro documento.

Por ejemplo, podemos eliminar todos los jugadores con menos de 100 puntos de vida. Ejecutamos el comando SQL DELETE:

DELETE FROM 'gamesim-sample'.player WHERE hitpoints < 100

Esto elimina a todos los jugadores que tengan menos de 100 puntos de vida, dejando intactos a los monstruos.

Resumen: manipulación flexible de datos N1QL/SQL a nivel de cubo o de tabla

El controlador Simba Couchbase ofrece a los usuarios la flexibilidad de manipular sus datos a nivel de bucket o de tabla utilizando N1QL o SQL. El uso de N1QL le permite realizar operaciones en todo el bucket, como la manipulación de esquemas, actualizaciones masivas o eliminaciones masivas en una sola operación. El uso de SQL le da acceso a las herramientas ETL tradicionales, así como a la manipulación de datos a nivel de tabla. Puede descargar y probar los controladores simba en http://www.simba.com/drivers/couchbase-odbc-jdbc/.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Don Pinto, Director Principal de Producto, Couchbase

Don Pinto es Gerente Principal de Producto en Couchbase y actualmente está enfocado en avanzar las capacidades de Couchbase Server. Es un apasionado de la tecnología de datos, y en el pasado ha escrito varios artículos sobre Couchbase Server, incluyendo blogs técnicos y libros blancos. Antes de unirse a Couchbase, Don pasó varios años en IBM, donde desempeñó el papel de desarrollador de software en el grupo de gestión de la información DB2 y, más recientemente, como director de programa en el equipo de SQL Server en Microsoft. Don tiene un máster en informática y una licenciatura en ingeniería informática por la Universidad de Toronto, Canadá.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.