Download Capítulo 3: Diseño e implementación de la base de datos

Document related concepts

PostgreSQL wikipedia , lookup

Lenguaje de definición de datos wikipedia , lookup

SQL wikipedia , lookup

Trigger (base de datos) wikipedia , lookup

Navicat wikipedia , lookup

Transcript
Inventario de una red IP orientado en CMSI
Capítulo 3: Diseño e implementación de la base de datos
33
Proyecto Fin de Carrera
Introducción
Toda la información de inventario debe ser guardada en una base de datos
centralizada. Tenemos por tanto que implementar el estándar CMSI en una base de datos.
Presentaremos en un esquema como quedaría el diagrama UML del estándar CMSI. El
esquema no seguirá estrictamente el estándar CMSI si no que estará orientado en dicho
estándar. Haremos algunas ampliaciones del estándar, estas ampliaciones se explicarán en
apartados posteriores.
Después veremos que tipo de base de datos vamos a utilizar. Para ello
compararemos las ventajas y los inconvenientes de los diversos tipos de datos que existen.
Una vez hayamos decidido que base de datos utilizar, elegiremos el servidor de base
de datos a instalar. Por último implementaremos el estándar CMSI en nuestra base de datos
definiendo las tablas necesarias.
Implementación de CMSI
En nuestro modelo de sistema de información nosotros vamos a tratar los productos
como ordenadores de nuestra red. Identificado por su dirección IP y MAC. Según en que
rama del árbol este, nos aportara información y características de ese ordenador. Tendremos
por tanto un sistema de inventario representado por un árbol de categoría orientado en
CMSI. Según vayamos viendo parte del árbol podemos ver los ordenadores que cumple con
la característica de esa rama.
A continuación vamos a ir indicando las ampliaciones del estándar CMSI que
hemos aplicado a nuestra base de datos centralizada de inventario.
En nuestra base de datos va a existir tantos árboles de categorías como sondas, de tal
forma que de cada sonda va a surgir un árbol de categoría. Esto se hace para definir perfiles
de usuarios, los cuales tienen accesos a ver la información de ciertas sondas y no de otras. A
pesar de esto no perdemos mucho frente al estándar CMSI por que todos estos árboles
comparten los mismos nodos y familias y los mismos tipos de definición. Lo único que se
hace es añadirle un atributo especial al árbol indicándole la sonda de la cual proviene la
información.
A continuación presentamos el esquema UML del estándar CMSI.
34
Inventario de una red IP orientado en CMSI
Imagen 14: Esquema UML de la base de datos de inventario
Explicamos a continuación cada uno de los objetos que conforman el diagrama
UML de nuestra base de datos de Inventario:
Category_tree: Tabla que contiene los niveles de jerarquía del árbol. Viene dado
por id que indica el nivel de jerarquía y un nombre.
Imagen 15: Tabla category_tree
Category_node: Tabla que contiene los nodos que conforman el árbol de categorías.
Viene dado por un identificador único que es el node_tag. El parents indica el nodo
padre, en el caso de que sea el primer nodo apuntará a NULL.
Imagen 16: Tabla category_name
Probes: Tabla que contiene las sondas que han detectado información de inventario.
Viene identificada por la dirección IP de la sonda. Date_update es el último instante
de tiempo en el que se detectó un mensaje proveniente de dicha sonda.
35
Proyecto Fin de Carrera
Imagen 17: Tabla probes
Hosts: Tabla que contiene los equipos de la red que se van detectando.
Imagen 18: Tabla hosts
Type_def: Tabla que contiene el tipo de definición de un atributo CMSI. Estos
atributos pueden venir dado por una expresión gramatical, un nodo o una lista de
valores.
Imagen 19: Tabla type_def
Grammar: Tabla que contiene la expresión gramatical de un tipo de definición de
atributo.
Imagen 20: Tabla grammar
Value_list: Tabla que contiene una lista de valores posibles para un tipo de
definición concreto.
Imagen 21: Tabla value_list
Family: Tabla que contiene las familias que existen en la base de datos. Son los
últimos nodos del árbol y se caracteriza por que tienen atributos propios. Existe un
36
Inventario de una red IP orientado en CMSI
elemento, grandparents, que hace referencia al primer nodo del árbol. Esto se hace
para saber de forma rápida a que rama pertenece dicha familia.
Imagen 22: Tabla family
Family_attr: En esta tabla se define los atributos de las familias. Como dijimos
anteriormente los atributos de familias se pueden reutilizar.
Imagen 23: Tabla family_attr
Family_attr_value: En esta tabla se inserta valores a los atributos de familias
definidos anteriormente.
Imagen 24: Tabla family_attr_value
Expresión: Tabla que contiene las reglas sintácticas que clasifican los mensajes en
el inventario. De tal forma que si un mensaje cumple esa regla sintáctica
automáticamente quedará registrado en aquella familias que tenga definida esa
expresión. Cuando nos referimos a regla sintáctica en la práctica suele ser
expresiones regulares de Perl.
Imagen 25: Tabla expresión
Attributes: Tabla que contiene los atributos de la regla sintáctica definida
anteriormente.
37
Proyecto Fin de Carrera
Imagen 26: Tabla attributes
Product: Tabla que contiene los productos perteneciente a una familia. También se
indica la sonda de la que proviene y el equipo al que hace referencia el producto.
Imagen 27: Tabla product
Product_attr: Tabla que contiene los atributos cerrados de una familia. A diferencia
de family_attr, estos atributos son diferente para cada producto. Cada atributo tiene
un tipo de definición concreto y puede ser reutilizado por otros productos.
Imagen 28: Tabla product_attr
Product_attr_value: Tabla que contiene los valores de los atributos de productos. La
columna family_tag y probes no son necesarias, pero se utiliza para comandos de
consultas más sencillos.
Imagen 29: Tabla product_attr_value
En cuanto a las ampliaciones que hemos insertado en nuestra base de datos, vamos a
comentarla a continuación:
El atributo grandparents es una de las ampliaciones que hemos realizado. Cada
familia tiene un enlace al nodo relacional que explicamos anteriormente, esto se hace con el
objetivo de que se sepa de qué tipo de productos estamos hablando en rangos muy
generales. Por ejemplo si se trata de un producto software o hardware, etc. Nosotros hemos
definidos 4 nodos grandparents:
38
Inventario de una red IP orientado en CMSI
Redes, te indica los ordenadores y las redes a la que pertenece un determinado
equipo.
Servicios, informa sobre el servicio que esta corriendo en cada equipo.
Redes, te indica los ordenadores y las redes a la que pertenece.
Sistema Operativo, indica el sistema operativo que tiene instalado un cierto equipo.
Propiedades, informa sobre caracteristicas y eventos que se ha producido en ciertos
equipos, por ejemplo reinicios, si es visible por un ping, etc.
Hardware, da información hardware de los equipos.
Sonda
Redes
Servicios
OS
Sistemas Operativos
Propiedades
Hardware
Imagen 30: Nodos grandparents
Otra ampliación más es que existe un nodo y una familia unknown, en este nodo se
muestra toda la información de los equipos que no se ha sabido clasificar, de tal forma que
si un mensaje no sabe a que parte del árbol pertenece, entonces por defecto se clasifica en
este nodo especial del árbol.
Existen expresiones regulares de clasificación, estas expresiones regulares (Tabla
expression) nos permite clasificar los datos en ciertas partes del árbol. Cada mensaje de
evento que llegue al sistema de inventario viene con un determinado mensaje. Lo que se
hace es pasarle unas expresiones regulares y así saber a que familia del árbol pertenece. El
usuario puede definir en cualquier momento expresiones regulares para clasificar los
mensajes. La forma más común de proceder es irte a la familia unknown y ver que mensajes
no ha sido capaz de clasificar el sistema de inventario. Se define una expresión regular de
tal forma que ese mensaje, hasta el momento desconocido por el sistema de inventario, lo
clasifique en la rama del árbol que el administrador le haya indicado. Además le puede
indicar los atributos que le resulte interesante registrar.
Se define unos atributos de productos por defecto, estos atributos deben ser
rellenados siempre:
IP: es la dirección IP del equipo detectado por la sonda.
Name: Nombre de red del equipo.
Sensor: Nombre del sensor que lo ha detectado. Es distinto al nombre de la sonda.
39
Proyecto Fin de Carrera
Date: Instante de tiempo que fue detectado dicho mensaje.
Port: Para el caso de que se trate de una familia relacionada con un servicio Web se
pone el puerto de dicho servicio.
Message: Mensaje de información que ha llegado al sistema de inventario, esto nos
sirve para clasificar la información, según el mensaje podemos clasificarla en una
parte del árbol u otra. Se le aplica por tanto expresiones regulares a este campo y
según si hace “match” en una familia u otra se clasifica. Si no hace “match” en
ninguna de las familias se pone en una de por defecto que es la familia Unknown
que indica que no ha sido capaz de clasificar este mensaje, esto le puede servir al
usuario para definir nuevas familias sobre la estructura.
Además de los atributos indicados anteriormente se puede definir otros atributos
para cada ordenador. La única limitación es que todos los ordenadores de dicha
familia tiene que tener ese mismo atributo.
Base de datos
Las bases de datos son un conjunto de datos que pertenecen al mismo contexto,
almacenados sistemáticamente para su uso posterior.
Un sistema gestor de Base de Datos (DBMS) es un tipo de software muy específico,
dedicado a servir de interfaz entre las bases de datos y las aplicaciones que la utilizan. Se
compone de un lenguaje de definición de datos, de un lenguaje de manipulación de datos y
de un lenguaje de consulta. (Wikipedia 1/2006).
Inf
or m
ac
ión
orm
Inf
ió
ac
n
Imagen 31: Esquema de un sistema gestor de base de datos
Las ventajas de las Bases de Datos son:
•
Referidas a los datos:
40
Inventario de una red IP orientado en CMSI
» Independencia de estos respecto de los tratamientos y viceversa.
» Mejor disponibilidad del sistema.
» Mayor eficacia en la recogida, codificación y entrada en el sistema.
•
Referidas a los resultados:
o Mayor coherencia.
o Mayor valor informativo.
o Mejor y más normalizada documentación.
•
Referidas a los usuarios:
o Acceso más rápido y sencillo de los usuarios finales.
o Más facilidades para compartir los datos por el conjunto de los usuarios.
o Mayor flexibilidad para atender a demandas cambiantes.
Los elementos más comunes de un modelo de Bases de Datos son:
•
Entidades: cualquier “objeto” discreto sobre el que se tiene información.
•
Relaciones: dependencia entre dos o más entidades.
•
Atributos: propiedades relevantes propias de una entidad o una relación.
•
Esquema: conjunto nominado de 2 o más entidades que tienen una vinculación
entre ellos.
Hay varios tipos de modelos de Bases de Datos:
•
Codasyl o de red.
•
Jerárquicas.
•
Relacionales.
•
Orientadas a objetos.
•
Documentales.
Cogeremos una Base de Datos relacional, por ser las más utilizadas y por que se
adapta muy bien a la información que queremos registrar. Especialmente el lenguaje de
Consulta Estructurado (Structured Quero Language) SQL. Aunque también podíamos
haber elegido el tipo de base de datos jerárquicos por que se adapta también a nuestra base
de datos. Lo que ocurre es que no está tan difundido como las base de datos SQL.
41
Proyecto Fin de Carrera
SQL es mucho más que una herramienta de consulta, aunque este fue su propósito
original. Actualmente se usa para controlar todas las funciones que un DBMS proporciona a
sus usuarios:
Definición de datos: permite al usuario definir la estructura y organización de los
datos almacenados y la relación entre ellos.
Obtención de datos: recuperar datos almacenados en la Base de Datos.
Manipulación de datos: actualización de la base de datos añadiendo, borrando y/o
modificando la información almacenada en la base de datos.
Control de Acceso: usado para restringir los permisos de un usuario para añadir o
barrar datos, protegiendo los datos almacenados.
Compartir datos: se usa para coordinar el acceso a datos concurrentemente,
asegurando que unos usuarios no interfieren con otros.
Integridad de los datos: define las restricciones de integridad en la base de datos,
protegiéndola de corrupción de los datos debido a actualizaciones inconsistentes y
fallos de los sistemas.
Por tanto SQL es un lenguaje de:
•
Consulta interactivo: los usuarios introducen comandos interactivamente en una
herramienta SQL y muestran los resultados por pantalla.
•
Programación de bases de datos: los programadores añaden código SQL en sus
aplicaciones para acceder a los datos de la base de datos.
•
Administración de base de datos: el administrador responsable lo utiliza para definir
la estructura de la base de datos.
•
Cliente/Servidor: los ordenadores personales usan SQL para comunicarse usando
una red con los servidores de bases de datos que almacenan los datos.
•
Acceso de datos por Internet: los servidores Web de Internet interactúan con los
datos corporativos que necesitan usando SQL para los accesos.
•
Bases de datos distribuidas: se usa SQL para ayudar a distribuir los datos a través de
muchos sistemas conectados.
•
Pasarela de bases de datos: en una red con una mezcla de diferentes productos de
DBMS, SQL a menudo se utiliza como intermediario para la comunicación con
otros productos.
Las características y beneficios de SQL son:
Los beneficios principales de SQL son:
42
Inventario de una red IP orientado en CMSI
1. Lenguaje fácil de aprender y comprender.
2. Herramienta intuitiva para la gestión de datos.
Las principales características de SQL que le han hecho triunfar en el mundo de las
bases de datos son las siguientes:
1. Independencia del vendedor.
2. Portabilidad a través de diferentes sistemas.
3. Definición como estándar.
4. Apoyo de IBM (DB2) y Microsoft (ODBC y ADO).
5. Basado en el modelo relacional.
6. Lenguaje de alto nivel, con estructura basada en el inglés.
7. Interactivo, permite búsquedas a medida.
8. Acceso a la base de datos a través de lenguajes de programación.
9. Múltiples vistas de los datos.
10. Definición de datos dinámica.
11. Arquitectura Cliente Servidor.
12. Extensible, incluye soporte para tecnología orientada a objetos-> Oracle.
13. Acceso a base de datos a través de Internet.
14. Integración con Java (JDBC).
Una vez que hemos elegido un tipo de base de datos relacional, utilizaremos el
servidor de base de datos SQL. En nuestro caso nos quedaremos con PosgreSQL, en el
siguiente apartado se explica las características y el motivo de su elección.
Postgresql
Introducción
PostgreSQL es un servidor de base de datos relacional libre, liberado bajo la licencia
BSD. Es una alternativa a otros sistemas de bases de datos de código abierto (como MySQL,
Firebird y MaxDB), así como sistemas propietarios como Oracle o DB2.
Características
Las principales características son:
43
Proyecto Fin de Carrera
•
Funciones: Las funciones permiten subir bloques de código que se ejecuten en el
servidor. Estas funciones pueden escribirse en una variedad de lenguajes, algunos
de los más importantes son PL/pgSQL, C, C++ y Java. Puede definirse si las
funciones serán ejecutadas con los permisos del cliente o del usuario que definió la
función.
•
Alta concurrencia: Mediante un sistema denominado MVCC (Acceso concurrente
multiversión) PostgreSQL permite que mientras un proceso escribe una tabla, otros
accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una
visión de lo último a lo que se le hizo commit. Esta estrategia es superior al uso de
bloqueos por tabla o por filas común en otras bases de datos, eliminando la
necesidad del uso de bloqueos explícitos.
•
Amplía variedad de tipos nativos: PostgreSQL provee nativamente soporte para:
o Número de precisión arbitraria.
o Texto de largo ilimitado.
o Figuras geométricas (con una variedad de funciones asociadas).
o Direcciones IP.
o Bloques de direcciones estilo CIDR (encaminamiento Inter-Dominios sin
clases) lo que comúnmente conocemos como máscara de red.
o Direcciones MAC.
o Vectores.
o Además los usuarios pueden crear sus propios tipos de datos, los que pueden
ser por completo indexables gracias a la infraestructura GIST de
PostgreSQL.
•
Claves ajenas conocidas como foreign keys.
•
Disparadores (triggers).
•
Vistas.
•
Integridad transaccional.
•
Herencia de tablas.
•
Tipos de datos y operaciones geométricas.
PostgreSQL es un sistema gestor de base de datos de objetos relacionales basado en
POSTGRES, Versión 4.2 desarrollado por la Universidad de Berkeley. POSTGRES fue
pionero en muchos conceptos que fueron utilizados después por muchas bases de datos
comerciales.
44
Inventario de una red IP orientado en CMSI
PostgreSQL es un Open-Source descendiente del código original de Berkeley. Esto
soporta una gran parte del estándar SQL.
MySQL & PostgreSQL
A continuación vamos a presentar las ventajas y los inconvenientes de ambos
gestores de bases de datos que son los más utilizados como bases de datos de código
abierto.
MySQL:
•
Su principal objetivo de diseño fue la velocidad, se sacrificaron algunas
características esenciales.
•
Otra característica importante es que consume muy poco recursos, tanto de CPU
como de memoria.
•
Licencia GPL a partir de la versión 3.23.19
•
Ventajas:
•
o
Mayor rendimiento. Mayor velocidad tanto al conectar con el servidor como
al servir SELECTs y demás comandos SQL.
o
Mejores utilidades de administración (backup, recuperación de errores, etc.)
o
Aunque se cuelgue, no suele perder información ni corromper los datos.
o
Mejor integración con PHP, que para nuestro caso no va a ser tan
importante.
o
No hay límites en el tamaño de los registros.
o
Mejor control de acceso, en el sentido de que usuarios tienen acceso a que
tablas y con que permisos.
o
MySQL se comporta relativamente mejor que PostgreSQL a la hora de
modificar o añadir campos a una tabla que se está utilizando muchas veces.
Inconvenientes:
o
No soporta transacciones, “roll-backs” ni “subselects”.
o
No considera las claves ajenas. Ignora la integridad referencial, dejándola en
manos del programador de la aplicación.
PostgreSQL:
•
PostgreSQL intenta ser un sistema de bases de datos de mayor nivel que MySQL, a
la altura de Oracle, Sybase o Interbase.
45
Proyecto Fin de Carrera
•
Licencia BSD
•
Ventajas:
•
o
Por su arquitectura de diseño, escala muy bien al aumentar el número de
CPUs y la cantidad de RAM.
o
Soporte transacciones y desde la versión 7.0, las claves ajenas (con
comprobaciones de integridad referencial).
o
Tiene mejor soporte para triggers y procedimientos con el servidor.
o
Soporta un subconjunto de SQL92 mayor que el que soporta MySQL, es
decir, se ajusta mejor al estándar SQL 92.
Inconvenientes:
o
Consume bastante más recursos y carga más el sistema.
o
Límite de tamaño de cada fila de las tablas a 8K (se puede ampliar a 32K
recompilando, pero con un coste añadido de rendimiento).
o
Es de 2 a 3 veces más lenta que MySQL.
o
Menos funciones en PHP.
En general, sistemas en los que la velocidad y el número de accesos concurrentes
sea algo primordial, y la seguridad no sea muy importante (puede bastar con hacer backups
periódicos que se restauran tras una caída del servidor). En cambio para sistemas más serios
en las que la consistencia de la base de datos sea fundamental (BD con información
realmente importante, bancos, etc.) PostgreSQL es una mejor opción pese a su mayor
lentitud.
Instalación
Para la instalación del servidor PostgreSQL en la versión 8.1.x en un sistema Unix
hay que realizar los siguientes pasos:
1. Nos descargamos las fuentes de la web oficial de postgreSQL que se da en la
bibliografía:
$ wget http://wwwmaster.postgresql.org/download/mirrorsftp?file=%2Fsource%2Fv8.1.10%2Fpostgresql-8.1.10.tar.gz .
2. Descomprimimos el fichero.
$ tar xzvf postgresql-8.1.10.tar.gz
46
Inventario de una red IP orientado en CMSI
3. Entramos en el directorio en el que se ha descomprimido las fuentes y lo
configuramos.
$ ./configure --prefix=/opt --with-ldap
4. Compilamos las fuentes.
$ make
5. Entramos como superusuario (root) e introducimos la contraseña.
$ su –
Password:
6. Instalamos las fuentes en nuestro equipo.
$ make install
7. Creamos el usuario postgres.
$ adduser postgres
8. Creamos el directorio donde se va a situar las bases de datos.
$ mkdir /opt/postgresql/data
9. Le damos permiso al usuario postgres para el directorio anterior.
$ chown postgres /opt/postgresql/data
10. Accedemos a la cuenta del usuario postgres.
$ su postgres
11. Inicializamos la base de datos.
$ /opt/postgresql/bin/initdb –D /opt/postgresql/data
47
Proyecto Fin de Carrera
12. Arrancamos el demonio de base de datos en modo background.
$ /opt/postgresql/bin/postmaster –D /opt/postgresql/data &
13. Creamos nuestra base de datos, que llamaremos eneo_asset.
$ /opt/postgresql/bin/createdb eneo_asset
14. Ejecutamos el fichero cmsip.sql y data.sql que se da en el anexo del capítulo.
$ /opt/postgresql/bin/psql –D eneo_asset –f cmsip.sql
$ /opt/postgresql/bin/psql –D eneo_asset –f data.sql
Ya tenemos nuestra base de datos PostgreSQL funcionando y con una base de datos
llamada eneo_asset que será la que contenga toda la información de inventario.
Bibliografía
Las fuentes consultadas para este capítulo son:
Wikipedia: Concepto de base de datos
http://www.wikipedia.com
Web oficial de PostgreSQL.
http://www.postgresql.org
48