#1
MongoDB
Abro este hilo para comentar una empresa que he conocido casi accidentalmente este fin de semana y que hoy presenta resultados: MongoDB.
De hecho, descubrí esta empresa mientras ojeaba las empresas que iban a presentar resultados y encontrarme con este nombre tan curioso, sobre todo por el sufijo DB que delata a lo que se dedica esta empresa: bases de datos (DB: databases).
Adelanto que lo novedoso de esta empresa es que su principal ventaja es que la estructura interna de sus bases de datos es totalmente diferente de las que tradicionalmente se han venido usando hasta la fecha. Su modelo de base de datos BSON está optimizada para un acceso más fácil a la información, especialmente cuando hay que acceder a conjuntos enormes de datos, lo cual cada vez es más frecuente. De hecho, el nombre Mongo viene, según Wikipedia, de “humongous” (gigante).
FUNCIONAMIENTO DE UNA BASE DE DATOS TRADICIONAL
Respecto a las bases de datos, a primera vista puede parecer un mercado más limitado de lo que en realidad es en la actualidad. Intentaré hacer una introducción de cosecha propia acerca de su importancia y de funcionamiento básico.
A finales del siglo pasado, las bases de datos básicamente servían para almacenar datos en redes la mayoría de veces relativamente pequeñas, como puede ser una oficina, un negocio tradicional y, más excepcionalmente, algunas redes más grandes como las de algunas multinacionales y algunas oficinas gubernamentales. Sin embargo, en la actualidad prácticamente cualquier proyecto web de cierta envergadura requiere guardar información en bases de datos. Prácticamente todas las webs, y múltiples servicios online (incluyendo servicios bancarios, reservas de vuelos, videojuegos, streaming, etc) requieren en última instancia de una base de datos donde se almacenen los datos referidos a sus clientes y los contenidos que ofrecen
La aplicación Access incluida en Microsoft Office permite hacerse una idea de cómo funciona una base de datos. Posiblemente es la aplicación menos usada del paquete de Office, pero permite utilizar una base de datos de una forma visual al usuario medio que no conoce un lenguaje de programación, y sacarle bastante partido permitiéndole crear formularios para la introducción de datos e informes para visualizarlos.
Se podrían almacenar datos en cualquier tipo de archivos, como por ejemplo una tabla de una hoja de Excel, pero esto tiene serias limitaciones: no podrían estar generando (y actualizando) datos dos usuarios simultáneamente, y además, el número y complejidad de los datos que se podrían almacenar sería más limitado.
La forma más simple de base de datos se basaría en una única tabla, por ejemplo, una lista de clientes de una librería. En esta tabla, habría una serie de filas, que representarían a cada cliente, y una serie de columnas, que representarían los distintos datos que nos interesa guardar de cada cliente (es obligatorio para el funcionamiento que exista un identificador único y, a partir de ahí, todo lo que consideremos útil: nombre, apellidos, dirección, etc).
El problema surge cuando queremos adjudicar otro tipo de datos al cliente, por ejemplo, un historial de sus compras. Si cada cliente solo pudiera realizar una compra, bastaría con añadir más columnas (código de producto, precio, etc), pero como se puede imaginar, esta sería una solución que no nos permitiría registrar más que una compra por cliente.
Algunos usuarios de Excel podrían pensar que tampoco supondría un gran problema: si el cliente realizara una nueva compra, podríamos insertar líneas nuevas en las que o bien volveríamos a copiar los datos del cliente o bien podríamos dejar líneas en blanco, o con comillas, indicando que se refieren al cliente anterior. Sin embargo, por motivos técnicos, esto no era posible en la estructura de archivos de ese tipo de bases de datos (aunque adelanto que esa forma de trabajar sí se parece a las bases de datos con las que trabaja mongoDB).
La solución de las bases de datos tradicionales se basa en tablas relacionadas (de ahí el nombre de este tipo de bases de datos; bases de datos relacionales).
En el caso anterior, los datos no podrían ser almacenados en una misma tabla porque un solo cliente podría realizar varias compras. Habría que crear una relación de uno a varios.
Lo que haríamos sería distribuir los datos en varias tablas:
- Una tabla de clientes.
- Una tabla de compras.
tabla compras en una base de datos Access
Cada registro de la tabla compras tendría un número que identificaría esa transacción, pero aparecería también un campo en el que aparecería el código del cliente. Y ambas tablas se podrían relacionar cruzando los datos de ambas:
- Dado un cliente determinado, podemos buscar su identificación, y filtrar en la tabla de compras para buscar las compras ha realizado ese mismo cliente (en las que aparecería esa id en el campo “cliente”).
- Si partimos de la tabla compras y queremos saber más sobre el cliente que ha realizado la compra, bastaría con anotar su identificación y buscar en la tabla de clientes.
Es obvio decir que para tablas del tamaño de los ejemplos podríamos realizar ese trabajo a mano, pero cuando tenemos cientos o miles de clientes y miles de compras, la cosa se complica para los humanos, pero es algo muy sencillo para un ordenador.
Para realizar las búsquedas, normalmente se recurrirá a Access u otro programa que buscará en estas tablas. En realidad, la manipulación de las bases de datos relacionales se hace con un lenguaje de programación específico, que viene integrado con el resto del software, orientado específicamente a realizar este tipo de búsquedas. Este lenguaje es el SQL (structured query language) que también es muy característico de este tipo de bases de datos, a las que a veces se las llama indistintamente bases de datos relacionales o bases de datos SQL.
Si queremos tener una base de datos con más funcionalidades, se nos podrían ocurrir otras mejoras:
- Por ejemplo, que en cada compra se pueda identificar el libro de entre una lista de los libros que se venden en esa librería. Esto podría hacerse generando otra tabla adicional con datos sobre el libro (nombre, ISBN, autor…) y nos evitaría problemas como el de que el vendedor teclee mal el nombre del libro al registrar la compra.
- Si se trata de un negocio de venta online, quizás queramos una tabla con los comentarios de los usuarios. Esto requeriría crear una nueva tabla en la que cada comentario ocuparía una fila, y en el estaría identificado el libro al que hace referencia, opcionalmente el usuario que escribe el comentario, etc.
Y por último, podrían existir relaciones aún más complejas, como relaciones de varios elementos de una tabla con varios elementos de otra. Por ejemplo, podríamos querer tener acceso al autor de un libro determinado. Pero sabemos que, especialmente en el ámbito de divulgación y académico, muchos libros tienen varios autores. Cada uno de esos autores puede tener otros libros que, a su vez, puede haber realizado en solitario o con autores distintos. Para cruzar este tipo de de relaciones libro(s)-autor(es) habría que contar no solo con una tabla de libros y otra de autores, sino también una tabla en la que aparecieran este tipo de interconexiones.