Este documento contiene una introduccion al paradigna Entity Framework de Microsoft, ademas incluye un How To para el montaje de un Cluster en MySql.
Universidad de El Salvador, Facultad Multidisciplinar de Occidente, Bases de Datos 2012.-
1. Universidad de El Salvador
Facultad Multidisciplinaria de Occidente
ENTITY
FRAMEWORK Y 1 de enero
MYSQL 2012
CLUSTER
Docente : Ing. Alexander
Calderón
Alumnos:
Canales Mancia Guillermo Ernesto
Flores Castro Francisco Alexander
Marroquín Paniagua Kenny Guadalupe
Rodriguez Umaña, Oscar Gustavo
Salinas Rodríguez Arturo Ernesto
2. Entity Framework
Entity Framework es un conjunto de tecnologías de ADO.NET que permiten el desarrollo
de aplicaciones de software orientadas a datos. Los arquitectos y programadores de
aplicaciones orientadas a datos se han enfrentado a la necesidad de lograr dos objetivos
muy diferentes:
modelar las entidades, las relaciones y la lógica de los problemas empresariales
que resuelven.
trabajar con los motores de datos que se usan para almacenar y recuperar los
datos.
Los datos pueden abarcar varios sistemas de almacenamiento, cada uno con sus propios
protocolos; incluso las aplicaciones que funcionan con un único sistema de
almacenamiento deben equilibrar los requisitos del sistema de almacenamiento con
respecto a los requisitos de escribir un código de aplicación eficaz y fácil de mantener.
Entity Framework permite a los programadores trabajar con datos en forma de objetos y
propiedades específicos del dominio, por ejemplo, con clientes y direcciones, sin tener
que pensar en las tablas de las bases de datos subyacentes y en las columnas en las que
se almacenan estos datos. Con Entity Framework, los desarrolladores de software pueden
trabajar en un nivel más alto de abstracción cuando tratan con datos, y puede crear y
mantener aplicaciones orientadas a datos con menos código que en las aplicaciones
tradicionales. Dado que Entity Framework es un componente de .NET Framework, las
aplicaciones se pueden ejecutar en cualquier equipo en el que esté instalado .NET
Framework a partir de la versión 3.5 SP1. Además permite a los desarrolladores crear
aplicaciones de acceso a datos programando con un modelo de aplicaciones
conceptuales en lugar de programar directamente con un esquema de almacenamiento
relacional. El objetivo es reducir la cantidad de código y el mantenimiento necesarios para
3. las aplicaciones orientadas a datos. Las aplicaciones de Entity Framework ofrecen las
siguientes ventajas:
Las aplicaciones pueden funcionar en términos de un modelo conceptual más
centrado en la aplicación, que incluye tipos con herencia, miembros complejos y
relaciones.
Las aplicaciones están libres de dependencias de codificación rígida de un motor
de datos o de un esquema de almacenamiento.
Las asignaciones entre el modelo conceptual y el esquema específico de
almacenamiento pueden cambiar sin tener que cambiar el código de la aplicación.
Los desarrolladores pueden trabajar con un modelo de objeto de aplicación
coherente que se puede asignar a diversos esquemas de almacenamiento,
posiblemente implementados en sistemas de administración de base de datos
diferentes.
Se pueden asignar varios modelos conceptuales a un único esquema de
almacenamiento.
La compatibilidad con Lenguaje Integrated Query (LINQ) proporciona validación de
la sintaxis en el momento de la compilación para consultas en un modelo
conceptual.
Un enfoque de diseño habitual para crear una aplicación o un servicio consiste en dividir
la aplicación o el servicio en tres partes:
modelo de dominio: define las entidades y relaciones del sistema que se está
modelando.
modelo lógico: relacional normaliza las entidades y relaciones en tablas con
restricciones de claves externas.
modelo físico: abarca las capacidades de un motor de datos determinado
especificando los detalles del almacenamiento en forma de particiones e índices.
Los administradores de bases de datos refinan el modelo físico para mejorar el
rendimiento, pero los programadores que escriben el código de la aplicación
principalmente se limitan a trabajar con el modelo lógico escribiendo consultas SQL y
llamando a procedimientos almacenados. Los modelos de dominio se suelen usar como
una herramienta para capturar y comunicar los requisitos de una aplicación, con
frecuencia como diagramas inertes que se ven y se explican en las primeras etapas de un
proyecto, y a continuación se abandonan. Muchos equipos de desarrolladores omiten la
creación de un modelo conceptual y comienzan especificando las tablas, columnas y
claves en una base de datos relacional.
Entity Framework da vida a los modelos conceptuales permitiendo a los programadores
consultar las entidades y relaciones en el modelo de dominio (denominado modelo
conceptual en Entity Framework) al tiempo que se basan para traducir esas operaciones
en los comandos específicos del origen de datos. Esto libera a las aplicaciones de las
4. dependencias codificadas de forma rígida en un origen de datos determinado. El modelo
conceptual, el modelo de almacenamiento y las asignaciones entre los dos se expresan
en esquemas basados en XML y se definen en archivos que tienen extensiones de
nombre correspondientes:
El lenguaje de definición de esquemas conceptuales (CSDL) define el modelo
conceptual. CSDL es la implementación de Entity Framework del Entity Data
Model. La extensión de archivo es .csdl.
El lenguaje de definición de esquemas de almacenamiento (SSDL) define el
modelo de almacenamiento, que también se denomina modelo lógico. La
extensión de archivo es .ssdl.
El lenguaje de especificación de asignaciones (MSL) define las asignaciones entre
los modelos conceptuales y de almacenamiento. La extensión de archivo es .msl.
El modelo de almacenamiento y las asignaciones pueden cambiar según sea necesario
sin requerir cambios en el modelo conceptual, las clases de datos o el código de la
aplicación. Dado que los modelos de almacenamiento son específicos del proveedor,
puede trabajar con un modelo conceptual coherente a través de varios orígenes de datos.
Entity Framework utiliza estos modelos y archivos de asignación para transformar las
operaciones de creación, lectura, actualización y eliminación de las entidades y relaciones
del modelo conceptual en las operaciones equivalentes en el origen de datos. Entity
Framework incluso permite asignar las entidades del modelo conceptual a los
procedimientos almacenados en el origen de datos.
Asignar objetos a datos
La programación orientada a objetos supone un desafío al interactuar con sistemas de
almacenamiento de datos. Aunque la organización de clases suele reflejar la organización
de las tablas de bases de datos relacionales, el ajuste no es perfecto. Varias tablas
normalizadas suelen corresponder a una sola clase y las relaciones entre las clases se
representan a menudo de forma diferente a las relaciones entre tablas. Por ejemplo, para
representar el cliente de un pedido de ventas, una clase Order podría utilizar una
propiedad que contiene una referencia a una instancia de una clase Customer, mientras
que una fila de la tabla Order en una base de datos contiene una columna de clave
externa con un valor que corresponde a un valor de clave principal en la
tabla Customer (o conjunto de columnas). Una clase Customer podría tener una
propiedad denominada Orders que contuviera una colección de instancias de la
clase Order, mientras que la tabla Customer en una base de datos no tiene ninguna
columna comparable.Entity Framework proporciona a los desarrolladores de software la
flexibilidad para representar las relaciones de esta manera, o para modelar más
estrechamente las relaciones tal como se representan en la base de datos
Las soluciones existentes han intentado cubrir este hueco, que se suele denominar
"desigualdad de impedancia", asignando únicamente clases y propiedades orientadas a
5. objetos a las tablas y columnas relacionales. En lugar de seguir este enfoque tradicional,
Entity Framework asigna las tablas relacionales, columnas y restricciones FOREIGN KEY
de los modelos lógicos a las entidades y relaciones de los modelos conceptuales. Esto
permite una mayor flexibilidad al definir los objetos y optimizar el modelo lógico. Las
herramientas de Entity Data Model generan clases de datos extensibles según el modelo
conceptual. Se trata de clases parciales que se pueden extender con miembros
adicionales que el programador agrega. De forma predeterminada, las clases que se
generan para un modelo conceptual determinado derivan de las clases base que
proporcionan servicios para materializar las entidades como objetos y para realizar un
seguimiento de los cambios y guardarlos. Los desarrolladores pueden utilizar estas clases
para trabajar con las entidades y relaciones como objetos relacionados mediante
asociaciones. Los desarrolladores también pueden personalizar las clases que se
generan para un modelo conceptual. Para obtener más información,
Obtener acceso a los datos de entidad y cambiarlos
Como algo más que otra solución de asignación objeto-relacional, Entity Framework trata
fundamentalmente de permitir que las aplicaciones obtengan acceso y cambien los datos
que están representados como entidades y relaciones en el modelo conceptual. Entity
Framework usa la información de los archivos del modelo y de asignación para traducir
las consultas de objeto con los tipos de entidad que se representan en el modelo
conceptual en consultas específicas del origen de datos. Los resultados de la consulta se
materializan en objetos que Entity Framework administra. Entity Framework proporciona
las maneras siguientes de consultar un modelo conceptual y devolver objetos:
LINQ to Entities. Proporciona compatibilidad con Language-Integrated Query
(LINQ) para consultar los tipos de entidad que se definen en un modelo
conceptual. Para obtener más información, vea LINQ to Entities.
Entity SQL . Un dialecto de SQL, independiente del almacenamiento, que trabaja
directamente con entidades del modelo conceptual y que admite conceptos de
Entity Data Model. Entity SQL se utiliza tanto con consultas de objeto como con
consultas que se ejecutan utilizando el proveedor EntityClient. Para obtener más
información, vea Información.
Métodos del generador de consultas Estos métodos permiten construir consultas
de Entity SQL utilizando métodos de consulta del estilo de LINQ. .
El Entity Framework incluye el proveedor de datos de EntityClient. Este proveedor
administra las conexiones, traduce las consultas de entidad en consultas específicas del
origen de datos y devuelve un lector de datos que Entity Framework usa para materializar
los datos de la entidad en los objetos. Cuando no se requiere la materialización de los
objetos, el proveedor de EntityClient también se puede utilizar como un proveedor de
datos ADO.NET estándar habilitando las aplicaciones para ejecutar consultas Entity SQL
y usar el lector de datos de solo lectura devuelto
6. El diagrama muestra la arquitectura de Entity Framework para el acceso a datos.
Las herramientas de Entity Data Model pueden generar una clase derivada
de ObjectContext que representa el contenedor de entidades definido en el modelo
conceptual. Este contexto del objeto proporciona los medios para realizar el seguimiento
de los cambios y administrar las identidades, la simultaneidad y las relaciones. Esta clase
también expone un método SaveChanges que escribe las inserciones, actualizaciones y
eliminaciones en el origen de datos. Al igual que las consultas, estas modificaciones son
realizadas bien por los comandos que el sistema genera automáticamente o bien por los
procedimientos almacenados que el programador especifica.
Consideraciones generales de seguridad
Las consideraciones de seguridad siguientes se aplican a todas las aplicaciones que
utilizan Entity Framework.
Usar solo proveedores de orígenes de datos de confianza.
Para comunicarse con el origen de datos, un proveedor debe hacer lo siguiente:
Recibir la cadena de conexión de Entity Framework .
Traducir el árbol de comandos al lenguaje de consultas nativo del origen de datos.
Ensamblar y devolver los conjuntos de resultados.
Durante la operación de inicio de sesión, la información que se basa en la contraseña del
usuario se pasa al servidor a través de las bibliotecas de red del origen de datos
subyacente. Un proveedor malintencionado puede robar las credenciales del usuario,
generar consultas malintencionadas o alterar el conjunto de resultados.
Cifrar la conexión para proteger los datos confidenciales.
Entity Framework no administra el cifrado de datos directamente. Si los usuarios tienen
acceso a los datos a través de una red pública, la aplicación debería establecer una
7. conexión cifrada al origen de datos para aumentar la seguridad. Para obtener más
información, consulte la documentación relacionada con la seguridad correspondiente al
origen de datos. Para un origen de datos de SQL Server, vea Cifrar las conexiones a SQL
Server.
Proteger la cadena de conexión.
La protección del acceso al origen de datos es uno de los objetivos más importantes a la
hora de proteger una aplicación. Una cadena de conexión presenta una vulnerabilidad
potencial si no se protege o si se construye incorrectamente. Al almacenar la información
de conexión en texto sin formato o conservarla en la memoria, se pone en riesgo todo el
sistema. A continuación se enumeran métodos recomendados para proteger las cadenas
de conexión:
Utilice la autenticación de Windows con un origen de datos de SQL Server.
Al utilizar la autenticación de Windows para conectarse a un origen de datos de
SQL Server, la cadena de conexión no contiene información de contraseñas ni del
inicio de sesión.
Cifre las secciones del archivo de configuración mediante una configuración
protegida.
ASP.NET incluye una característica denominada configuración protegida, que
permite cifrar la información confidencial en un archivo de configuración. Si bien se
ha diseñado principalmente para ASP.NET, la configuración protegida también
puede usarse para cifrar secciones de los archivos de configuración en
aplicaciones Windows
Para consultar una descripción detallada de las posibilidades de la nueva
configuración protegida, vea Encrypting Configuration Information Using Protected
Configuration.
Almacene las cadenas de conexión en archivos de configuración protegidos.
Nunca debería incrustar las cadenas de conexión en el código fuente. Las
cadenas de conexión también se pueden almacenar en archivos de configuración,
lo que elimina la necesidad de incrustarlas en el código de la aplicación. De forma
predeterminada, el Asistente para Entity Data Model almacena las cadenas de
conexión en el archivo de configuración de la aplicación. Debe proteger este
archivo para evitar el acceso no autorizado.
Utilice generadores de cadenas de conexión al crear dinámicamente las
conexiones.
Si debe construir las cadenas de conexión en tiempo de ejecución, utilice la
clase EntityConnectionStringBuilder. Esta clase de generador de cadenas ayuda a
evitar los ataques de inyección en las cadenas de conexión validando y anulando
la información de entrada no válida. Para obtener más información, vea Cómo
generar una cadena de conexión EntityConnection (Entity Framework). Use
igualmente la clase de generador de cadenas adecuada para construir la cadena
de conexión a un origen de datos que forme parte de la cadena de conexión de
Entity Framework
8. HOW TO CLUSTER MYSQL
El término Clúster en Bases de Datos significa procesamiento paralelo, es decir como
clientes nos conectamos a un servidor qué física y lógicamente está distribuido en varias
PC’s , aprovechando el performance de todas en conjunto como una sola máquina, esto
es posible ya que el procesamiento se distribuye teniendo la administración, las bases de
datos y el servicio en nodos diferentes.
Hay que distinguir ciertos conceptos, en muchos contextos, el término "nodo" se usa para
indicar una máquina, pero cuando se discute MySQL Clúster significa un proceso. Puede
haber cualquier número de nodos en una máquina, para los que se usa el término
máquina clúster.
MySQL Clúster es una tecnología que permite clustering de bases de datos en memoria
en un entorno de no compartición. La arquitectura de no compartición permite que el
sistema funcione con hardware barato, y sin ningún requerimiento especial de hardware o
software. Tampoco tienen ningún punto único de fallo porque cada componente tiene su
propia memoria y disco.
Hay tres tipos de nodos clúster, y en una configuración MySQL Clúster mínima, al menos
habrá tres nodos, uno de cada tipo:
El nodo de administración (MGM) : El rol de este tipo de nodo es administrar los
otros nodos dentro del MySQL Clúster, tal como proporcionar datos de
configuración, iniciar y parar nodos, ejecutar copias de seguridad, y así. Como
este tipo de nodo administra la configuración de otros nodos, un nodo de este tipo
debe arrancarse primero, antes de cualquier otro nodo. Un nodo MGM se arranca
con el comando ndb_mgmd.
El nodo de datos: Este es el tipo de nodo que almacena los datos del clúster. Hay
tantos nodos de datos como réplicas, multiplicado por el número de fragmentos.
Por ejemplo, con dos réplicas, cada uno teniendo dos fragmentos, necesita cuatro
nodos de datos. No es necesario tener más de una réplica. Un nodo de datos se
arranca con el comando ndbd.
9. El nodo SQL: Este es el nodo que accede a los datos del clúster. En el caso de
MySQL Clúster, un nodo cliente es un servidor MySQL tradicional que usa el motor
NDB Clúster . Un nodo SQL típicamente se arranca con el comando mysqld --
ndbcluster o símplemente usando mysqld con ndbcluster añadido a my.cnf.
La configuración de un clúster implica configurar cada nodo individual en el clúster e
inicializar los enlaces de comunicación individual entre los nodos. MySQL Clúster está
diseñado con la intención que los nodos de almacenamiento son homogéneos en
términos de procesador, espacio de memoria, y ancho de banda. Además, para
proporcionar un punto único de configuración, todos los datos de configuración del clúster
entero se guardan en un único fichero de configuración.
El servidor de administración (nodo MGM) administra el fichero de configuración del
clúster y el log. Cada nodo en el clúster recibe los datos de configuración del servidor de
administración, y necesita una forma de determinar dónde reside el servidor de
administración. Cuando ocurren eventos interesantes en los nodos de datos, los nodos
transfieren información acerca de estos eventos al servidor de administración, que guarda
la información en el log del clúster.
Además, puede haber cualquier número de procesos clientes del clúster o aplicaciones.
Hay de dos tipos:
Clientes MySQL estándar: No son diferentes para MySQL Clúster que para
cualquier MySQL (no clúster). En otras palabras, MySQL Clúster puede ser
accedido para aplicaciones MySQL existentes escritas en PHP, Perl, C, C++,
Java, Python, Ruby, y así.
Clientes de administración: Estos clientes conectan al servidor de administración
y proporcionan comandos para arrancar y parar nodos, arrancar y parar traceo de
mensajes (sólo en versiones de depuración), mostrar versiones y estatus de
nodos, arrancar y parar copias de seguridad, y así.
Hardware, software y redes
Una de las ventajas de MySQL Clúster es que puede ejecutarse en hardware normal sin
ningún requerimiento especial a parte de grandes cantidades de RAM, debido al hecho
que todos los datos se almacenan en memoria Naturalmente, CPUs múltiples y más
rápidas mejoran el rendimiento. Los requerimientos de memoria para procesos clúster son
relativamente pequeños.
Los requerimientos de software para Clúster son modestos. Los sistemas operativos de
las máquinas no requieren ningún modulo no usual, servicios, aplicaciones o
configuración extraña para soportar MySQL Clúster. Para Mac OS X o Solaris, la
instalación estándar es suficiente. Para Linux, una instalación estándar debe ser todo lo
necesario.
10. Para una comunicación entre nodos, el clúster soporta red TCP/IP en cualquier topología
estándar, y como mínimo se espera una red 100 Mbps Ethernet, más un switch, hub, o
router para proporcionar conectividad de red al clúster entero. Recomendamos que
MySQL Clúster se ejecute en su subred que no está compartida con máquinas no-clúster
por las siguientes razones:
Seguridad: La comunicación entre nodos del clúster no están cifradas. La única
forma de proteger transmisiones dentro de un MySQL Clúster es ejecutar su
clúster en una red protegida. Si trata de usar MySQL Clúster para aplicaciones
Web, el clúster debe residir detrás de un firewall y no en su DMZ (DMZ) o en otro
lugar.
Eficiencia: Inicializar un MySQL Clúster en una red privada o protegida permite
que el clúster haga uso exclusivo del ancho de banda entre máquinas del clúster.
Usar un switch esperado para su MySQL Clúster no sólo ayuda a protegerse de
accesos no autorizados a los datos del clúster, también asegura que los nodos del
clúster están protegidos de interferencias causadas por transmisiones entre otras
máquinas en la red. Para mayor confianza puede usar switches duales y tarjetas
duales para eliminar la red como punto único de fallo; varios dispositivos soportan
fallos para estos enlaces de comunicación.
Arquitectura de un Clúster.
11. INSTALACION Y CONFIGURACION DE CLUSTER
192.168.1.5 192.168.1.9
192.168.1.6 192.168.1.4
Todos los ordenadores tienen instalado sistema operativo Linux
Instalación de Nodo de Administración: (MGM NODE):
1- Descargar archivo mysql-cluster-gpl-7.2.6-linux2.6-i686.tar
2- Descomprimir archivo
3- Ubicarse en el directorio del archivo recién descompreso
4- Copiar los binarios en la carpeta /usr/local/bin de la siguiente manera:
cp bin/ndb_mgm* /usr/local/bin
5- Ubicarse en el directorio /usr/local/bin
6- Dar permisos de ejecución a los binarios recién copiados:
chmod +x ndb_mgm*
7- Crear en /var/lib/mysql_cluster un archivo llamado config.ini, el cual tiene que lucir
de la siguiente manera:
12. Instalación de Nodos de datos:
1-Agregar un usuario y un grupo llamado mysql al sistema operativo:
#groupadd mysql
#useradd -g mysql mysql
2-Descargar y descomprimir archivo archivo mysql-cluster-gpl-7.2.6-linux2.6-
i686.tar:
#tar -C /usr/local -xzvf mysql-cluster-gpl-7.2.6-linux2.6-i686.tar
3-Renombrar directorio recién descompreso a mysql para evitar sentencias muy
largas
#mv /usr/local/ mysql-cluster-gpl-7.2.6-linux2.6-i686 /usr/local/mysql
13. 4-Situarse en directorio recién descompreso:
#cd /usr/local/mysql
5-Instalar bases de datos del sistema (propias de mysql):
#scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql
6-Aplicar permisos al usuario mysql para la ejecución:
#cd /usr/local/mysql
# chown -R root .
# chown -R mysql data
# chgrp -R mysql .
7-Crear en el directorio /etc un archivo llamado my.cnf, este archivo es el
encargado de dictar la dirección
Instalación de nodo Mysql
1- Descargar y descomprimir archivo mysql-cluster-gpl-7.2.6-linux2.6-i686.tar
#tar -C /usr/local -xzvf mysql-cluster-gpl-7.2.6-linux2.6-i686.tar
2- Renombrar directorio
# mv /usr/local/mysql-cluster-gpl-7.0.15-linux-i686-glibc23.tar.gz /usr/local/mysql
3- Agregar usuario y grupo mysql
# groupadd mysql
14. # useradd -g mysql mysql
4- Moverse al directorio recién descompreso y darle permisos al usuario mysql
# cd /usr/local/mysql
# chown -R root .
# chown -R mysql data
# chgrp -R mysql
5- Crear entrada en registro de servicios de Linux para mysql y darle permisos de
ejecución
# cp support-files/mysql.server /etc/init.d/mysql
# chmod +x /etc/init.d/mysql
ARRANCADO DE CLUSTER
El proceso de arranque de un clúster consta de los siguientes pasos:
1- Iniciar nodo de Administración
2- Iniciar nodos de datos:
3- Iniciar nodo Mysql
15. 4- Verificar si en el nodo de administración aparecen conectados los nodos de datos
y mysql
Iniciando conexiones con nodos de datos
Nodos de datos conectados