BASES DE DATOS NoSql Son bases de datos pensadas para aplicaciones que hagan un uso intensivo de la misma. Estas bases de datos permiten una mayor flexibilidad y facilidad a la hora de introducir los datos y funcionan con mayor rapidez a la hora de solicitar datos. Estas bases de datos son montadas normalmente en clusters, es decir, se alojan en la RAM no en el disco duro, por lo que llevan a cabo las operaciones en nanosegundos en lugar de milisegundos. Diferencias entre Bases de datos NoSql y Sql: Para facilitar la comprensión de las NoSql conviene hacer ciertas asociaciones primero: 1) Una base de datos NoSql está compuesta de colecciones, lo que equivaldría a tablas en las SQL. 2) Las colecciones están compuestas por documentos, que equivaldrían a los registros 3) Los documentos están formados por campos, que equivaldrían a las columnas de las filas 4) En las NoSql los campos pueden ser indexados. Su funcionamiento es el mismo que en las SQL La principal diferencia entre ambas es la estructuración de los datos. En las bases de datos Sql la estructura de datos se define a nivel de tablas, por lo que todos los registros de la tabla tendrán la misma estructura. En las bases de datos NoSql la estructura de datos se define a nivel de documento, por lo que cada registro tendrá una estructura de datos propia. En esta característica es donde radica la versatilidad de estas bases de datos. La otra gran diferencia es que las bases de datos NoSql NO son relacionales por lo que es el programador el que tiene que garantizar la integridad de datos. MongoDB Es un motor de base de datos perteneciente a la familia NoSql. Guarda los datos en documentos JSON y su manejo se lleva a cabo ejecutando funciones JavaScript.
Para comprender mejor su funcionamiento realizaremos un ejemplo de creación y utilización de una base de datos en MongoDB y también en SQL. Ejemplo de Biblioteca: En SQL crearíamos la base de datos de la siguiente forma: CREATE SCHEMA IF NOT EXISTS Biblioteca; USE Biblioteca; En MongoDB no existen instrucciones CREATE, sino que las bases de datos y las colecciones se crean automáticamente cuando hacemos uso de ellas. Por tanto para crear la base de datos se haría de la siguiente forma: use Biblioteca; NOTA: Esta base de datos se crea de manera temporal, es decir, no quedará registrada en mongo hasta que creemos al menos una colección en ella, igualmente la colección no quedará registrada hasta que se introduzca algún documento en ella
Para crear una tabla en SQL: CREATE TABLE Usuarios( idusuario int auto_increment NOT NULL PRIMARY KEY, Nombre varchar(30) NOT NULL, Apellidos varchar(50) NOT NULL, Edad int(11) NOT NULL, Direccion varchar(100) NOT NULL, Ciudad varchar(30) NOT NULL, CorreoElectronico varchar(50) DEFAULT null ) ENGINE=InnoDB; En MongoDB no hay instrucción para crear una colección, sino que se insertan documentos en ella directamente. Recordemos que MongoDB crea bases de datos no relacionales, por lo que es el programador el que tiene que garantizar la integridad de datos. Insertar registros o documentos: Como se menciona antes, en las bases de datos SQL la estructura de datos se define a nivel de tabla, por lo que los insert se construyen siempre con el mismo patrón, pudiéndose obviar aquellos campos que puedan ser nulos o que sean auto numéricos. Un Ejemplo de insert en la tabla anterior sería: INSERT INTO usuarios (Nombre,Apellidos,Edad,Direccion,Ciudad,CorreoElectronico) VALUES ('Agustin','Hidalgo Cotán',23,'C. Ficticia N12 1B','Sevilla', 'prueba@gmail.com'); Sin embargo en MongoDb, al estar la estructura de datos definida a nivel de documento, puedo insertar usuarios que no tengan correo, o que tengan un número de teléfono, etc. Ejemplo: db.usuarios.insert({name: 'Agustin',apellidos: 'Hidalgo Cotan', edad: 23,... ciudad: 'Sevilla', telefono: 954123456});
Actualizaciones (Updates): Como sabemos, en las bases de datos SQL a la hora de ejecutar un UPDATE si queremos que afecte a unos registros determinados nos referimos a ellos mediante una cláusula WHERE. En las NoSql, incluido MongoDB, la cláusula WHERE es sustituida por los denominados selectores. Los selectores son pares campo: valor que hacen referencia a un registro. Si seguimos el ejemplo anterior un selector sería, por ejemplo, name: 'Agustin'. Se pueden incluir en una función varios selectores, para referirnos a uno o varios documentos. En primer lugar pongamos un ejemplo de UPDATE en sql: UPDATE usuarios SET Edad=25, Ciudad='Huelva' WHERE name LIKE 'Agustin'; Su homónimo en MongoDB sería: db.usuarios.update({name: 'Agustin',apellidos: 'Hidalgo Cotan'},{edad: 25, ciudad: Huelva }); En este caso {name: 'Agustin', apellidos: 'Hidalgo Cotan'} serían los selectores. Sin embargo este tipo de UPDATE tiene un inconveniente. Mientras que el UPDATE de SQL actualiza los valores de los campos, el de Mongo sustituye los campos existentes en el registro que indican los selectores por los que se adjuntan en el UPDATE. Si lo que queremos es que simplemente actualice los valores de los campos tenemos que recurrir al operador $set, quedando el UPDATE de la siguiente forma: db.usuarios.update({name: 'Agustin',apellidos: 'Hidalgo Cotan'},{$set:{... edad: 25, ciudad: 'Huelva'}}); NOTA: si dentro del $set se pone un campo que no existía en el documento se crea dicho campo. Busquedas(Querys): Un ejemplo de Query en MySql sería: SELECT * FROM usuarios WHERE nombre LIKE Agustin En Mongodb la función que realiza búsquedas es la función find(). Al igual que en las bases de datos MySql si ejecuto: db.usuarios.find(); Mongo devolverá todo el contenido de la colección Para poder filtrar contenido de la colección se utilizan los selectores. Ejemplo:
db.usuarios.find({name: Agustin }); Borrar registros: Un ejemplo de Delete en Mysql sería: DELETE FROM usuarios WHERE name LIKE Agustin Recordemos que en MongoDb los registros son documentos. Al igual que en los casos anteriores si queremos borrar ciertos registros hemos de recurrir a los selectores: db.usuarios.remove({name : Agustin }); Borrar tablas: Para borrar una tabla en una base de datos MySql: DROP TABLE IF EXISTS usuarios; Para borrar una colección en MongoDb se usaría la siguiente función: db.drop_collection( usuarios ); Por último conviene resaltar que en MySql existe, como todos sabemos, la opción de actualizar tablas. Sin embargo esta posibilidad no se contempla en MongoDB porque, reiterando lo mencionado anteriormente, la estructura de datos se define a nivel de documento y no a nivel de colección. Este documento se centra en la comparativa de bases de datos MySql y NoSql y también en el funcionamiento y utilización básico de MongoDB, sin embargo este motor de bases de datos es mucho más profundo y complejo, teniendo posibilidades como crear nuestras propias funciones, realizar querys más avanzadas, crear subcolecciones dentro de colecciones, etc.