[1.1] Funcionamiento los Sistemas Gestores de Bases de Datos
[1.1.1]Sistemas Gestores de Bases de Datos
Un Sistema Gestor de Base de Datos (SGBD) es el software que permite gestionar bases de datos, ocultando la física de la misma y permitiendo su gestión desde un nivel más conceptual. Dicho software permite separar las aplicaciones (los programas) de los datos; de modo que los programas negocian con el SGBD el acceso a los datos.
En definitiva se trata de un software complejo, pero de gran importancia por lo delicado de la rama de la información a la que se dedica. Los SGBD han crecido de manera exponencial estos últimos años por el éxito de Internet, que ha provocado el acceso a miles y miles de bases de datos por parte de millones de usuarios cada día.
[1.1.2]modelo ANSI/X3/SPARC
El grupo de trabajo SPARC de la sección X3 del organismo de estándares ANSI, diseño un modelo en el que indicaba cómo debía funcionar un SGBD para asegurar la separación entre datos y aplicaciones. Este organismo definió tres y así especificó tres niveles:
- Nivel externo. Define el nivel en el que los usuarios y usuarias utilizan la base de datos. La forma de ver la misma oculta la estructura real de la base de datos. Este nivel ofrece el objetivo final de una base de datos, que es la visión de la misma que poseen los usuarios y que gestionar observar de forma cómoda la información almacenada en el sistema.
Este nivel es creado por los desarrolladores o programadores de la base de datos.
- Nivel interno/físico. Se refiere a la forma en la que realmente se almacena la información de la base de datos. Los administradores (DBA) de la base de datos son los encargados de crear y configurar la base de datos a este nivel. Por lo tanto este nivel es el más relacionado con los contenidos de este manual.
- Nivel conceptual. Define la base de datos haciendo referencia a la forma en la que se relaciona la información, ocultando la forma en la que realmente se almacena en el ordenador. Es un nivel más humano que el físico, pero no tanto como el externo.
Este nivel lo gestionan los analistas y/o diseñadores de la base de datos. Los esquemas de la base de datos relacionados con este nivel (esquema conceptual y esquema lógico) son los primeros que se crean.


La Ilustración 1, muestra la idea de los niveles en el modelo ANSI. Los tres niveles usan un modelo de trabajo para crear los esquemas (diagramas) de trabajo de la base de datos. La idea es que pasar de un nivel a otro sea un proceso automatizado (mediante lo que ANSI llama funciones de traducción.
La Ilustración 2 muestra la propuesta arquitectónica del modelo ANSI/X3/SPARC. En ella se observa el proceso de creación de una base de datos dividida en la fase de definición y la de creación. Los números del esquema expresan el funcionamiento:
- El administrador empresarial (lo que hoy en día se conoce como analista) crea el esquema conceptual. Éste se procesa con la ayuda de un procesador de esquema conceptual (lo que hoy en día se conoce como herramienta CASE).
- De ese proceso se obtienen metadatos, la información que permite describir a la propia base de datos.
- El esquema conceptual se modifica por parte del administrador de la base de datos para producir el esquema interno de la misma usando un procesador de esquemas internos que genera nuevos metadatos.
- A la vez el administrador de aplicaciones (jefe de desarrollo) genera el esquema externo usando otro procesador que generará nuevos metadatos.
- La fase de manipulación la inicia el usuario, el cual gestiona los datos usando esquemas externos. Los puntos 9 a 14 lo que hacen es transformar la información pedida por el usuario de forma externa, a su forma física. Ese paso requiere dos transformaciones intermedias, pasando por los esquemas conceptuales e internos (para lo cual se usan los metadatos almacenados).
[1.1.3]Niveles de abstracción actuales
Hoy en día se definen más niveles de trabajo con las bases de datos. Se habla de cinco (a veces incluso de más) niveles. Estos niveles son (empezando desde el más cercano al usuario):
[1.1.4] funciones del SGBD
Cualquier Sistema Gestor de Bases de Datos debe de ser capaz de realizar tres funciones básicas:
- Función de descripción o definición. Mediante ella se crean los metadatos de la base de datos. Es la que utilizan los administradores y analistas de las bases de datos para crear los esquemas lógicos, internos y físicos. Esta función se realiza mediante el lenguaje de descripción de datos o DDL, aunque se puede realizar mediante herramientas gráficas que faciliten esta tarea.
Las instrucciones SQL estándar que se diseñaron para realizar esta función son CREATE, ALTER y DROP.
- Función de manipulación. Permite modificar y utilizar los datos de la base de datos. Se realiza mediante el lenguaje de modificación de datos o DML. Esta función a veces se divide en tres
- Modificación propiamente dicha, realizada mediante un lenguaje DML, que permite añadir, modificar y eliminar datos. En SQL se realiza mediante las instrucciones INSERT, DELETE y UPDATE.
- Consultar datos. Realizada con un lenguaje DQL. En SQL se realiza mediante la potente instrucción SELECT.
- Control de transacciones.Realizada con un lenguaje DTL. ROLLBACK y COMMIT son las instrucciones creadas para esta funconalidad.
- Función de control. Mediante esta función los administradores poseen mecanismos para proteger las visiones de los datos permitidas a cada usuario. Es la función relacionada con la seguridad de las bases de datos. El lenguaje que implementa esta función es el lenguaje de control de datos o DCL.
En SQL son GRANT y REVOKE las instrucciones realizadas con esta función.
[1.1.5]tareas del DBA
Estos apuntes están dedicados a la labor del administrador de bases de datos o DBA. Las tareas más comúnmente aceptadas como implícitas a la labor de un DBA son:
- Configurar e instalar el hardware en el que se instalará el servidor o servidores de bases de datos. Implica decidir qué hardware es el óptimo e implementar memoria, discos e instalación de red necesaria. A veces hay un segundo administrador (el del sistema) que se encarga de ello pero basándose en las necesidades expuestas por el DBA.
- Configurar e instalar el Sistema Operativo. También la gestión mínima del sistema operativo para que la base de datos funcione correcta y rápidamente. Nuevamente, puede ser una tarea coordinada con un administrador del sistema.
- Instalación y mantenimiento del SGBD. Seleccionando la más adecuada forma de instalación y configurando lo necesario para su óptimo rendimiento, acorde con las necesidades. También es parte de esta tarea el control de las actualizaciones del sistema de bases de datos que sean necesarias.
- Crear y configurar las base de datos. Creación de la estructura interna de la base de datos (tablas, usuarios, permisos, vistas,…). Es otra de las tareas más habitualmente relacionadas con el DBA y la primera fase (y las más crítica) en a administración de una base de datos.
- Control de los usuarios y los permisos. En definitiva establecer las políticas de seguridad ante accesos no cualificados, tan imprescindibles en toda base de datos.
- Gestión de la seguridad. Complemente la tarea anterior para proteger al sistema ante ataques de terceros o condiciones que comprometan la estabilidad del sistema.
- Monitorizar y optimizar el rendimiento de la base de datos. Un DBA debe detectar los cuellos de botella del sistema y actuar en consecuencia. Esto incluye optimizar las instrucciones, crear estructura de acceso veloces o mejorar la infrastructura hardware y software.
- Realizar tareas de copia de seguridad y recuperación. Quizá la tarea más crítica. Consiste en realizar acciones para en caso de catástrofe poder recuperar todos los datos
[1.2] opciones de funcionamiento de un SGBD
[1.2.1]SGBD monocapa
Se trata de Sistemas Gestores instalados en una máquina desde la que se conectan los propios usuarios y administradores. Es decir todo el sistema está en una sola máquina.
La ventaja es la seguridad y la clara desventaja la baja disponibilidad e incomodidad de trabajo.
Es un modelo que sólo se utiliza con bases de datos pequeñas y poca cantidad de conexiones. El software Access de Microsoft es considerada un sistema gestor monocapa (aunque tiene algunas posibilidades para utilizar en dos capas).

[1.2.2]SGBD de dos capas
Usa un modelo de funcionamiento tipo cliente/servidor. La base de datos y el sistema gestor se alojan en un servidor, mientras que los clientes acceden desde máquinas distintas a través de la red (sea local o global).
Los usuarios requieren disponer de un software de acceso denominado cliente de base de datos. En el servidor hay procesos encargados de atender a estas peticiones.

En los sistemas bicapas hay dos posibilidades:
- Arquitectura cliente/servidor único. Un solo servidor gestiona la base de datos, todos los clientes se conectan a él para realizar las peticiones a la base de datos.
- Arquitectura cliente/multiservidor. La base de datos se distribuye entre varios servidores. El cliente no sabe realmente a qué servidor se conecta; el software de control de comunicaciones se encargará de dirigir al usuario al servidor adecuado. De forma lógica, es como si se tratara de un solo servidor aunque físicamente sean muchos (el cliente no percibe que haya más de un servidor).
[1.2.3]SGBD de tres o más capas
En este caso entre el cliente y el servidor hay al menos una capa intermedia (puede haber varias). Esa capa (o capas) se encarga de recoger las peticiones de los clientes y luego de comunicarse con el servidor (o servidores) de bases de datos para recibir la respuesta y enviarla al cliente.

El caso típico es que la capa intermedia sea un servidor web, que recibe las peticiones a través de aplicaciones web; de este modo para conectarse a la base de datos, el usuario solo requiere un navegador web, que es un software muy habitual en cualquier máquina y por lo tanto no requiere una instalación de software adicional en la máquina cliente.
Este modelo es el que más se está potenciando en la actualidad por motivos de seguridad y ocultación de la base de datos.
El servidor intermedio, en muchos casos, realmente es el que aloja la interfaz de manejo de los usuarios de la base de datos. En términos del modelo ANSI, es el que almacena y sirve los esquemas externos de la base de datos.
1interfaces de acceso a las bases de datos
El servidor intermedio se suele comunicar con el servidor de bases de datos a través de un componente (un driver) que proporciona a los programadores una interfaz (API) de acceso a la base de datos. Las interfaces más populares son:
- ODBC (Open DataBase Connectivity). Interfaz muy utilizada y veterana auspiciada por Microsoft para acceder a todo tipo de bases de datos (tanto relacionales como no relacionales) a través de SQL incrustado en el código. Funciona en todo tipo de sistemas y plataformas.
- JDBC (Java DataBase Connect). Interfaz de uso habitual para los programadores del lenguaje Java creada por la empresa Sun Microsystems (creadora del lenguaje Java). Es similar a la anterior, pero utilizable solo en este lenguaje.
- OLE DB (Online Linking and Embeded DataBases). Interfaz de bajo nivel para el acceso a bases de datos de todo tipo. Se basa en PDBC al que aporta nuevas posibilidades. No ha tenido el éxito que sigue teniendo ODBC.
- ADO (ActiveX Data Objects). Interfaz creada por Microsoft para el acceso a bases de datos a través de objetos ActiveX creados en Visual Basic.
- ADO.Net. Interfaz de acceso a base de datos para aplicaciones basadas en la plataforma .Net de Microsoft.
- GDA (GNU Data Access). Puesto que las interfaces de acceso pertenecen a empresas, GDA es una interfaz abierta creada para acceder a todo tipo de bases de datos a través de una serie de funciones y módulos lo más genéricos posibles. La idea en su diseño era proporcionar la funcionalidad de ODBC o JDBC pero desde la óptica del software abierto.
[1.3] repaso del modelo relacional
[1.3.1]fundamentos del modelo relacional
El Modelo Relacional fue enunciado por Edgar F. Codd en los años 70 y, todavía, sigue siendo el modelo más utilizado por los Sistemas Gestores de Bases de Datos comerciales.
Codd se basó en los teoremas de conjuntos de Cantor y Childs para crear un modelo flexible, entendible y eficiente de base de datos. Las implementaciones iniciales de este modelo fueron muy costosas, pero ahora hay cientos de sistemas comerciales que usan este modelo.
Los detalles fundamentales de este modelo son:
- Los datos se organizan en tablas. Cada tabla contiene datos referidos a un elemento distinguible en el mundo real (personas, facturas, contratos, etc.)
- Las tablas están formadas por filas y columnas. Las columnas indican un atributo (nombre, primer apellido, salario, etc.), cada fila es un ejemplar de cada elemento del mundo real. Por ejemplo, si una tabla se usa para almacenar los datos de los trabajadores, cada fila representa los datos de un trabajador.
- La intersección entre fila y columna contiene un dato concreto.
- Una columna, o un conjunto de columnas, se establecen como clave principal o primaria de la tabla, de modo que los datos que contienen son distintos en cada fila de la tabla.
- Para poder relacionar datos de diferentes tablas, se usan claves secundarias o foráneas. Datos que se refieren a claves primarias de otras tablas.
- En las tablas relacionales se pueden aplicar estas restricciones:
- Clave primaria (Primary Key, PK). Las columnas marcadas así, identifican cada fila y además no pueden quedar vacías ni repetir valores en diferentes filas.
- Unicidad (Unique, UK). Lasa columnas marcadas con ella no pueden repetir valores en diferentes filas.
- Obligatoriedad (Not Null, NN). Las columnas con esta restricción, obligatoriamente deben de contener algún valor (no pueden quedar vacías).
- Integridad referencial (Foreign Key, FK). Los valores de esas columnas deben de corresponderse con los de las columnas de la clave principal con cuya tabla se relacionan.

[1.4] Sistemas Gestores de Bases de Datos Comerciales de tipo Relacional
[1.4.1]licencias de software
El gurú del software libre, Richard Stallman denomina al software propietario (software cuyo uso y explotación se rige por un contrato privado emitido por la empresa fabricante) software privativo. La razón es que la licencia de uso de ese software no permite ver ni editar el código fuente original y, por lo tanto, impide modificar el mismo y adaptarlo a nuevas funcionalidades.
Por otro lado, el propio Stallman define al software que sí permite este proceso, software libre. En ambos casos el software no tiene por qué ser gratuito. Es decir, la diferencia no es la gratuidad sino la libertad de utilizar el código fuente del software.
Una definición, quizá menos tendenciosa, es la que diferencia al software en: software de código abierto (aquel cuyo código fuente está a disposición del cliente) y software de código cerrado u oculto. Está diferencia de software se debe a dos formas diferentes de entender la fabricación de software.
Los defensores del código cerrado argumentan que es lógico protegerle para evitar copiar su tecnología por parte de la competencia e incluso por razones de seguridad del mismo, al no poder asegurar su correcto funcionamiento ante modificaciones de terceros.
Los defensores del código abierto están a favor porque ofrece la posibilidad de poder modificar el código por parte de miles de programadores en todo el mundo que pueden compartir dichas mejoras y así rápidamente y de manera dinámica perfeccionar el producto. Argumentan que es más seguro este software ya que permite detectar problemas y virtudes más rápidamente.
[1.4.2]SGBD de código cerrado
Normalmente las licencias de uso de Sistemas Gestores de Bases de Datos con código cerrado usan licencias tipo CLUF o EULA, acrónimos equivalentes (en español y en inglés respectivamente de) de contrato de licencia de usuario final.
En estas licencias, el usuario firma unas condiciones de uso por el software, entre las que siempre figuran el hecho de no poder distribuir libremente el mismo y que está restringido a unas condiciones de trabajo concretas . Por ejemplo se restringe el número de máquinas en el que se puede instalar o el número de usuarios que la pueden utilizar.
Ejemplos de SGBD de este tipo son:
- Oracle Database. Propiedad de Oracle Corporation. Es el SGBD más veterano y más influyente ya que la mayoría de mejoras al SQL original se desarrollaron para este SGBD. Sigue siendo uno de los SGBD comerciales más utilizados y además posee una gran relación con el lenguaje Java, acrecentada por la compra de la empresa creadora del mismo, Sun Microsystems.
Presume de su gran estabilidad y escalabilidad, un control avanzado de transacciones y de sus lenguajes internos de manejo. Especialmente famoso es su lenguaje procedimental PL/SQL. Es un SGBD multiplataforma, que se puede instalar en diferentes sistemas, especialmente Linux de tipo Red Hat Enterprise, Windows y Solaris.
- DB2. Propiedad de IBM, es una de las bases de datos comerciales más populares. Desarrollada para Windows, UNIX y Linux. Implementa XML de manera nativa y dispone de amplias facilidades de migración de datos (especialmente desde Oracle) así como uso de transacciones avanzadas.
- SQL Server. Propiedad de Microsoft. Originalmente basado en el código del SGBD SyBase que Microsoft. Actualmente SyBase (ahora perteneciente a la empresa SAP) y SQL Server son productos diferentes. SQL Server dispone de una gran escalabilidad, estabilidad, uso de transacciones, entorno gráfico avanzado y de éxito entre los programadores de la plataforma .NET (también de Microsoft por su compatibilidad con esta).
- Informix. Propiedad de IBM desde 2001 (anteriormente perteneciente a la empresa Informix). Durante los años 90 fue el sistema más popular por detrás de Oracle, por lo que sigue siendo el software de gestión de las bases de datos numerosos negocios
[1.4.3]SGBD de código abierto
1licencias de código abierto
- GPL (GNU General Public License). Es la licencia más utilizada en el mundo del software de código abierto. Fue creada por Richard Stallman para el proyecto GNU, por lo tanto es la licencia del sistema Linux. Es la Free Software Fundation la entidad encargada de actualizar y revisar esta licencia.
Esta licencia permite:
- Modificar y distribuir el software bajo esta licencia (incluso si se modifica ).
- Cobrar por la distribución del software (incluso si lo hemos modificado)
Las restricciones más importantes que realiza esta licencia son:
- Disminuir, en las obras distribuidas, la licencia original. Es decir no podemos, por ejemplo, cerrar el código original o modificar esa licencia.
- Distribuir el software sin el código fuente original.
- Distribuir el software sin suministrar a los destinatarios una copia de la licencia GPL del software.
- Aplicar derechos de copyright, si el autor no indica explícitamente que la obra original era GPL.
- Licencia BSD. Es la que se creó para los sistemas BSD (Berkeley Software Distribution). Es menos restrictiva que la anterior. Permite modificar y distribuir el software bajo esta licencia (incluso si se modifica ) en la forma que queramos siempre que se cumpla
- Si distribuimos el software debemos mantener el aviso de copyright anterior del software en el que se basa nuestra distribución.
- No podemos usar el nombre de los autores originales ni de sus colaboradores para apoyar o promocionar una distribución modificada del software original.
Hay que tener en cuenta que incluso podemos modificar software con licencia BSD y distribuirle bajo una licencia de software cerrado. El caso más típico de esta idea es el sistema Mac OS de Apple que se basa originalmente en un sistema BSD.
- Licencia MIT. Licencia creada por el Instituto Tecnológico de Masachusetts, para sus distribuciones de software, concretamente se utilizó para el sistema X Window System. Es, como la anterior, muy permisiva. Permite modificar y redistribuir el software en la forma que el usuario desee, basta con incluir el aviso de copyright de esta licencia (que incluso se puede modificar).
- Licencia Apache. Presente en todo el software distribuido por la fundación Apache. Solo exige que se avise al usuario que el software original utilizaba licencia Apache, pero se permite que una distribución de software sea más restrictiva que el original (al estilo de las dos licencias anteriores).
- Dominio público. Es la licencia más permisiva de todas. De hecho un software bajo esta denominación no tiene ningún derecho de autor o restricción de uso. Es la licencia de uso de las obras (sean del tipo que sean) a las que le caducan los derechos de autor.
2productos comerciales de código abierto
- MySQL. Inicialmente creada por la empresa MySQL AB, posteriormente comprada por Sun Microsystems que, a su vez, fue comprada por Oracle. Ha sido considerada como la principal SGBD de la comunidad de programadores de código abierto y de hecho en Internet sigue siendo la principal base de datos asociada a una aplicación web. Mantiene su licencia de tipo GPL, pero posee una segunda licencia cerrada para opciones de compra comercial con soporte.
Es muy popular por su histórica asociación con el lenguaje PHP, por su buena estabilidad, gran escalabilidad, e incluso uso de transacciones y lenguaje procedimental; además de ser un producto con infinidad de plataformas posibles para su instalación.
- MariaDB. Derivada la anterior por Michael Widenius, fundador de MySQL. La idea es disponer de un producto compatible con MySQL que mantenga la licencia GPL de forma perdurable. Esta siendo muy exitosa y está reemplazando a MySQL en numerosas instalaciones de Linux.
- PostgreSQL. Versión de código abierto basada en el producto Ingres de la Universidad de Berkeley. Usa licencia de tipo MIT. Es muy potente y, probablemente, sea el SGBD relacional más respetuoso con los estándares. Hoy en día, está considerada como la más potente de las bases de datos de código abierto y a partir de su núcleo se han creado otros productos de gestión de bases de datos.
- SQLite. Creada por el desarrollador Richard Hipp, usa una licencia de dominio público. Presume de ser totalmente relacional, compatible con ACID (gestión de transacciones completo) e incluso incluir un lenguaje procedimental (al estilo de PL/SQL). Todo ello en apenas 300KB de espacio.
Está escrita en C y guarda todo lo que necesita en un solo fichero para cada base de datos. Su ligereza y potencia aceptable la han hecho muy popular en muchas aplicaciones e incluso en los sistemas operativos móviles (casi todos la integran).
[1.5] bases de datos NoSQL. modelos diferentes del relacional
[1.5.1]introducción
Las bases de datos relacionales han sido el modelo más popular desde finales de los años 70 por su solidez y gran facilidad para diseñar sistemas complejos. Sin embargo en estos últimos años empiezan a estar desbordadas ante el uso de bases de datos que tienen que dar servicio veloz y concurrente a miles de usuarios, los cuales son capaces de generar enormes cantidades de información en poco tiempo.
Esta información en una base de datos relacional habría que validarla con las reglas e integridad que se imponen en esas bases de datos, indexarla y asegurar su uso en transacciones, etc.
En un sistema con miles de entradas por minuto (como ocurre con las bases de datos de las redes sociales), el sistema se colapsaría. Por ello se han diseñado bases de datos que se saltan el modelo relacional y que ya no utilizan el lenguaje SQL. De ahí el nombre de sistemas NoSQL.
Aunque este término se utiliza para designar a las bases de datos documentales, gráficas y otros esquemas de bases de datos; actualmente se utiliza especialmente para designar a las bases de datos que requieren tantas transacciones por segundo, que el esquema relacional tradicional no daría abasto para ello.
La base teórica de este modelo se basa en el teorema de CAP o de Brewer, que indica que en un sistema distribuido no se pueden asegurar simultáneamente estas tres reglas:
- Consistencia (C). Que consigue que la información sea la misma (y en todo momento) en todos los nodos que almacenan los datos
- Disponibilidad (A de Availability). Que hace que cada instrucción realizada sobre los datos reciba la confirmación de si ha sido satisfactoria o no. Es decir, se tiene la seguridad de que el sistema siempre atiende a los usuarios ocurra lo que ocurra.
- Tolerancia a fallos (P de Partition tolerance), que permite que el sistema siga funcionando aun cuando se pierdan datos u ocurran errores.
Un sistema relacional de base de datos podría asegurar la C y la A, pero no la disponibilidad en caso de una gran demanda de peticiones. Las bases de datos NoSQL siempre son tolerantes a fallos a cambio de no asegurar la consistencia (como ocurre con CouchDB o Cassandra) o la disponibilidad (como ocurre con MongoDB o Redis).
[1.5.2]diferencias con bases de datos SQL
Las bases NoSQL utilizan un modelo diferente en el que los datos se almacenan de forma menos estricta, en especial no siguen estas reglas:
- Transacciones ACID, como sí hacen los SGBD potentes relacionales (como Oracle, DB2, SQLServer o PostgreSQL). ACID hace referencia a las propiedades:
- Atomicidad (A). Que implica que ninguna instrucción se pueda quedar a medias. Es decir o se ha ejecutado completamente o no, aunque ocurra un error grave en el servidor.
- Consistencia (C). Asegura que una transacción siempre mantiene la integridad de los datos, se anule o se lleve finalmente a cabo la transacción. Incluso en cualquier momento intermedio de la transacción.
- Aislamiento (I). Asegura que las transacciones simultáneas no se afecten entre sí. Es decir que una transacción será independiente de la otra.
- Durabilidad (D). Asegura que cuando se confirme la transacción, los efectos de sus instrucciones serán definitivos, independientemente de que el sistema se apague o cierre por un error grave.
No obstante hay bases de datos NoSQL que son capaces de gestionar transacciones ACID, al menos en los nodos centrales (los que compactan la información definitiva).
En la mayoría se usa una alternativa conocida como BASE, que es una norma de disponibilidad y consistencia menos ambiciosa.
- Datos no relacionales. Los datos no se almacenan en tablas relacionales que se combinan mediante operaciones de tipo JOIN. El modelo lógico es distinto y variable dependiendo del sistema.
- SQL como lenguaje de consulta. En su lugar utilizan lenguajes de programación como Java, JavaScript o C++ para acceder a los datos y otros como XML o JSON para definir los datos y metadatos.
[1.5.3]usos habituales de las bases de datos NoSQL
- Datos de registros que se modifican cada poco tiempo (logs de servidores web, listado de peticiones http, etc.)
- Datos que se producen de forma paralela (se graban a la vez)
- Datos con relaciones complejas, difícilmente consultables desde SQL o representables de forma relacional
- Datos desestructurados o combinaciones de datos estructurados y desestructurados.
- Datos que se producen a gran velocidad
[1.5.4]tipos de bases de datos NoSQL

Se consideran dentro de esta clasificación a estos tipos de bases de datos:
- Clave/valor. Basadas en el funcionamiento de los arrays asociativos. Se asocia una clave (no repetible) a uno o varios valores.
- Amazon Dynamo DB. Desarrollada por la empresa Amazon, es un proyecto propiedad de esta empresa implementada para gestionar la enorme cantidad de transacciones de esta empresa y como una de las bases de su negocio en la nube. Almacena los datos en estructuras clave, valor: los valores son elementos binarios y, por lo tanto, opacos salvo desde la propia base de datos.
- Redis. Posee licencia BSD. Usa un modelo de asociación de claves a un contenido indexado. Usa la RAM de forma intensiva para almacenar los datos. El resultado de su arquitectura es una base de datos muy veloz. Por ello cada vez es más utilizada
- Oracle NoSQL. SGBD de Oracle que permite modelado de datos de forma relacional, como documentos JSON o como datos de tipo clave/valor.
- Almacenes documentales. En ella, la información importante utiliza un formato documental; es decir, un formato que encapsule la información y sus metadatos. Los datos se almacenan usando XML, JSON o incluso formatos binarios como PDF o Microsoft Office.

Los documentos se asocian a un valor clave (key) que permite su in–dexación. Algunas bases de datos comerciales de tipo documental son:
- MongoDB. Todavía es el SGBD de tipo NoSQL más utilizado. Tiene licencia GNU y utiliza un formato documental llamado BSON que es una versión binaria del lenguaje JSON. Las funcionalidades de acceso y gestión de datos y metadatos se realizan mediante JavaScript.
- Apache CouchDB. Dentro de la familia Apache (y usando licencia de código abierto Apache) es una base de datos NoSQL orientada a almacenar documentos. Usa formato JSON para almacenar los datos y las consultas se realizan mediante JavaScript. Permite gestionar la información mediante peticiones HTTP de tipo REST.
Almacenes de columna ancha (wide column stores). Se trata, en realidad, de una modalidad de base de datos de tipo clave/valor en la que los datos se almacenan en tablas, filas y columnas. La diferencia con las relacionales es que el nombre y tipo de las columnas varían de fila a fila.- Google BigTable. Base de datos propietaria utilizada para muchos de los servicios de almacenamiento de Google. Los datos se almacenan en una estructura multidimensional de tres claves (fila, columna y fecha) y permiten ser particionados. El modelo físico se basa en el Google File System, modelo de archivos propietario de Google.
- Apache Cassandra. Con licencia Apache, es muy popular y de contrastada potencia. Se desarrolló inicialmente por facebook. Los datos se almacenan en tuplas sin relaciones de integridad. Presume, además, de un crecimiento exponencial en estos últimos tiempos y de ser el motor de base de datos de servicios como twitter o Netflix.
- Apache HBase. Licencia Apache. Se basó en BigTable. Se utiliza en numerosas aplicaciones basadas en datos. HBase es parte del proyecto Hadoop de Apache para el proceso de Big Data.

- Basadas en grafos. Utilizan una estructura de los lenguajes de programación conocida como grafo, que permite relacionar los datos a través de enlaces que facilitan el recorrido por los mismos. Se usa para almacenar datos con relaciones complejas (por ejemplo trayectos con coordenadas GPS, relaciones sociales,…).
- Neo4j. Es el SGBD de este tipo más utilizado. Es capaz de asegurar transacciones de tipo ACID. Posee licencia GPL y está programada en Java. Usa el lenguaje CQL (Cypher Query Language) creado para las bases de datos de este tipo. Permite la gestión de los datos a través de peticiones HTTP de tipo REST. Su licencia es GPL
- OrientDB. Se la considera de este tipo, pero en realidad permite organizar los datos en forma documental, con clave/valor u orientada a objetos. Las relaciones entre los datos siempre utilizan un modelo de grafos en todo caso. Usa licencia Apache

- Bases de datos nativas XML. El formato documental XML se utiliza en casi cualquier base de datos comercial actual. Se habla de nativas cuando el sistema utiliza en todo momento XML para almacenar y gestionar los datos. En ellas la información se almacena en forma documental utilizando XML y se maneja con los lenguajes relacionados con XML: XQuery, XPath, XSL,… La gestión avanzada se realiza con conectores que permiten manejar el XML desde lenguajes clásicos como por ejemplo Java. Ejemplos:
- Mark Logic Server. Usa licencia comercial.
- BaseX. Utilizada por la comunidad GitHub (que es un servicio de almacenamiento en la nube utilizado por miles de programadores), de libre uso.
- Virtuoso. Posee licencia GPL. En realidad es un sistema multimodelo que permite manipular los datos desde un enfoque relacional o basado en grafos de tipo RDF (lenguaje de definición basado en XML).
[1.5.5]BigData y MapReduce
1idea del Big Data
Big Data es un término que se utiliza para hacer referencia a los datos que son tan enormes y complejos que requieren métodos de gestión y consulta sobre los mismos que escapa a las técnicas clásicas de trabajo con bases de datos.
El uso de este término se ha potenciado debido a la producción masiva de información digital que se realiza continuamente desde Internet.
Para que un conjunto de datos sean considerados Big Data, tienen que ser enormes en cuanto a cantidad, muy variados en tipo y estructura, producidos a gran velocidad y veraces (información real).

2MapReduce
Se trata de un modelo de programación que permite procesar enormes volúmenes de datos. Se basa en computación distribuida.
Muchas bases de datos NoSQL poseen funciones de tipo MapReduce, pero la implementación de este modelo es especialmente utilizada en sistemas de trabajo con BigData.
MapReduce no utiliza un modelo lógico de base de datos, sino que trabaja con sistemas de ficheros directamente. En este sentido hay dos soluciones muy populares para almacenar los ficheros:
- Google File System (GFS). Solución de archivos distribuidos creada de forma propietaria por Google para aplicar MapReduce.
- Hadoop File System (HDFS). Solución similar a la anterior, pero gratuita y de código abierto.
3soluciones comerciales
- Apache Hadoop. Se trata de un marco (framework) de trabajo que permite trabajar con grandes volúmenes de datos de forma distribuida. Une el sistema de ficheros HDFS (para el amacenamiento de los datos) con MapReduce (para el proceso). Es, de largo, la solución más utilizada para trabajar con BigData.
- Apache Spark. Es otro framework de trabajo con una finalidad similar pero que admite diferentes posibilidades para el almacenamiento de datos (incluido HDFS). Es más rápido que Hadoop por lo que se usa más para aplicaciones que requieren gran velocidad de proceso de datos (inteligencia artificial, aplicaciones de tiempo real, machine learning,etc.).
Se pueden utilizar ambos marcos (Spark y Hadoop) a la vez.