1. ADMINISTRACION DE BASE DE DATOS
UNIVERSIDAD PERUANA DE CIENCIAS E INFORMATICA
jeanpier9910@gmail.com
2. En informática, NoSQL (a veces llamado "no sólo SQL") es una
amplia clase de sistemas de gestión de bases de datos que difieren
del modelo clásico del sistema de gestión de bases de datos
relacionales (RDBMS) en aspectos importantes, el más destacado
que no usan SQL como el principal lenguaje de consultas.
Los sistemas de bases de datos NoSQL crecieron con las principales
compañías de Internet, como Google, Amazon, Twitter y Facebook.
Estas compañías se dieron cuenta que el rendimiento y sus
propiedades de tiempo real eran más importantes que la
coherencia, en la que las bases de datos relacionales tradicionales
dedicaban una gran cantidad de tiempo de proceso.
(NoSQL)
3. Introducción
El nombre de MongoDB proviene de “humongous”, que significa enorme
en inglés, y es una base de datos NoSQL software libre, escalable y de alto
rendimiento escrita en C++.
MongoDB es un sistema de bases de datos NoSQL orientado a
documentos, a diferencia de MySQL, este no es una base de datos
relacional. Es open source, lleva entre nosotros desde el 2009.
Considera que mongoDB fue diseñado para ser un motor de búsqueda
sobre aplicaciones en la nube, debes de ser bien específico al momento
de elegir un sistema NoSQL. Esto porque tienen diferentes funciones o
están optimizados para diferentes tareas: Como Cassandra que fue
diseñado para búsquedas en Facebook.
4. MongoDB es un sistema de base de datos multiplataforma orientado
a documentos, de esquema libre. Esto significa que cada entrada o
registro puede tener un esquema de datos diferente, con atributos o
“columnas” que no tienen por qué repetirse de un registro a otro.
Está escrito en C++, lo que le confiere cierta cercanía al bare metal, o
recursos de hardware de la máquina, de modo que es bastante rápido a la
hora de ejecutar sus tareas. Además, está licenciado
como GNUAGPL 3.0, de modo que se trata de un software de licencia
libre. Funciona en sistemas operativos Windows, Linux, OS X y Solaris.
5. En MongoDB, cada registro o conjunto de datos se denomina documento.
Los documentos se pueden agrupar en colecciones, las cuales se podría
decir que son el equivalente a las tablas en una base de datos relacional
(sólo que las colecciones pueden almacenar documentos con muy
diferentes formatos, en lugar de estar sometidos a un esquema fijo).
Una base de datos en MongoDB tiene diferentes conceptos a una base de
datos regular como MySQL. Cada registro o unidad básica de datos se le
denomina documento. Y cada conjunto de documentos, que formarían
una tabla, se le llama colección.
Un documento se podría comprar con el concepto de fila y una colección
a una tabla.
6. Características:
Software abierto
Escalable
Alta disponibilidad (puede trabajar en modo maestro-
esclavo)
Orientado a documentos (no es relacional)
Simplicidad basada en esquemas de tipo JSON
Consultas dinámicas
7. Características:
Completo soporte de índices, incluyendo índices
secundarios, objetos internos, arrays (cadenas).
Rápido, actualizaciones in situ.
Almacenamiento eficiente de datos binarios en objetos
largos, tales como vídeos o fotografías
Replicación y soporte a prueba de fallos
Auto fragmentación para escalabilidad a nivel de nube.
Acceso y gestión mediante drivers en multitud de lenguajes
de programación:
C, C++, C#, .NET, Java, JavaScript, PHP, Phyton, Ruby, Perl, et
c.
Soporte, formación y consultoría.
8. Formato de los documentos:
Los distintos documentos se almacenan en formato BSON, o Binary JSON,
que es una versión modificada de JSON que permite búsquedas rápidas de
datos. Para hacernos una idea, BSON guarda de forma explícita las
longitudes de los campos, los índices de los arrays, y demás información
útil para el escaneo de datos. Es por esto que, en algunos casos, el mismo
documento en BSON ocupa un poco más de espacio de lo que ocuparía de
estar almacenado directamente en formato JSON.
Pero una de las ideas claves en los sistemas NoSQL es que el
almacenamiento es barato, y es mejor aprovecharlo si así se introduce un
considerable incremento en la velocidad de localización de información
dentro de un documento.
9. Colecciones
Una colección nos ayuda a organizarnos de manera mucho más fácil y rápida.
Código :
Notas importantes
- Mantener diferentes tipos de documentos en una misma colección es de
masoquistas.
- Un string vacío no es un nombre válido, así como no se puede utilizar un
string con signo de dolar.
- Es más rápido obtener una lista de documentos que mantengan la misma
estructura.
- Siempre planea la estructura de tus colecciones y documentos antes de
comenzar.
10. Cómo consultar los datos: Sin entrar demasiado en detalles acerca
de todas las posibilidades que MongoDB nos ofrece para consultar los
datos almacenados, sí quisiera nombrar algunas de ellas, para hacer notar
que no estamos frente a un sistema simple de almacenamiento de pares
clave-valor.
En primer lugar, MongoDB nos permite utilizar funciones Map y
Reduce escritas en Javascript para seleccionar los atributos que nos
interesan de los datos, y agregarlos (unificarlos, simplificarlos) en la
manera deseada, respectivamente. Esto es algo habitual en muchos
sistemas NoSQL, y en algunos casos es incluso la única forma posible de
consultar datos.
11. Trabajando con documentos
Para insertar documentos en nuestra BD usaremos la orden
“db.coleccion.insert”:
MongoDB soporta varios tipos para sus datos. Tenemos los típicos del
formato JSON (string, integer, boolean, double, null, array, object) asi
como varios especiales (date, object id, binary data, regular expression,
code).
Como tenemos un interprete Javascript todo para nosotros podemos
hacer como como esta:
12. Para poder consultar los datos de nuestra BD podemos usar la orden
“db.coleccion.find”:
En caso de que tengamos muchos resultados MongoDB solo muestra los
10 primeros y podemos ir viendo los grupos restantes con la orden “it”.
13. Aquí es interesante ver como MongoDB nos ha generado un campo “_id”
para cada una de los documentos insertados. Este campo id es
autogenerado por defecto y está indexado (hace que las búsquedas por él
sean mucho mas rápidas). Si ya tenemos un código que nos pueda servir
como identificador se lo podemos pasar en la inserción y MongoDB lo
usará.
14. Lo interesante es que a find le podemos pasar un documento de forma
que MongoDB nos devolverá aquellos documentos cuyos valores
coincidan. Esto es lo que se conoce como “query by example”.
Un detalle importante es que podemos utilizar el tipo “regular expression”
en estas consultas:
15. En MongoDB se pueden utilizar consultas al valor de un atributo
específico. Por ejemplo, podemos capturar el post que tiene un
determinado título:
El valor a consultar puede estar anidado en un tipo de datos más
completo en el atributo del documento (por ejemplo, como valor de un
hash asociado al atributo, o como el valor de uno de los ítems de un
array). Se utiliza un punto como separador de los nombres de las claves de
los diferentes hashes que hay que recorrer hasta llegar al valor deseado.
Por ejemplo, la siguiente consulta devolvería todos los posts escritos por
un determinado autor:
16. Y esta otra los posts etiquetados con MongoDB:
El hash utilizado como conjunto de condiciones que deben cumplir los
documentos a devolver puede incluir operadores de muy diversos tipos,
Algunos de ellos son:
$all : Para indicar que el array almacenado como valor del atributo debe
tener los mismos elementos que el proporcionado en la condición.
$exists : Para comprobar que el atributo existe en el documento.
$mod : Para comprobar el resto de una división del valor del atributo por
un número.
$ne : Para indicar que el valor no puede ser el proporcionado.
$in : Para indicar que el valor debe estar entre alguno de los
proporcionados.
$nin : Contrario de $in.
18. Por ejemplo, si tenemos un blog podemos guardar los comentarios dentro
de cada post (esto iría en una colección llamada “posts”):
Lo bueno es que podemos realizar consultas sobre los datos de estos
documentos embebidos de forma que podemos obtener los posts que
contengan un comentario hecho por Manolo:
19. Manejo de datos desde la shell
Para hacer una inserción y guardarla escribimos lo siguiente para obtener
algo parecido a pepito = tontito…
Código :
Y para imprimir el contenido
Código :
20. Ejemplo de uso en Java:
Lo primero es descargar e añadir al classpath ”el driver .jar necesario para poder
conectar a la base de datos”.
A continuación un ejemplo de conexion a la base de datos y de diferentes
acciones, el ejemplo esta basado en la documentación oficial.