lunes, 11 de junio de 2012

Entity Framework y MySQL Cluster

Configuacion de cluster MySQL

Leer nota completa...

miércoles, 6 de junio de 2012

NHiBERNATE Y REPLICACION SQL

NHiBERNATE
Nhibernate, Motor de persistencia
Puesto a que este mundo es muy cambiante debemos estar al tanto de las diferentes tipos de tecnologías que vienen saliendo al campo informático. Herramientas que van a facilitar la vida de cualquier programados, analista de base de datos, administrador de red, en fin en este campo tan variado y complicado que es la informática. Con este trabajo daremos a conocer una de las tantas tecnologías nuevas en las que el campo de programación va avanzando y mejorando para lograr hacer la vida de dichos más fácil.



Leer nota completa...

lunes, 21 de mayo de 2012

Cluster PostgreSQL En Windows



Introducción a Postgresql
   
Durante el transcurso de las últimas tres décadas, se han manejado una infinidad de gestores de bases de datos, ya sean libres o propietarios; con características únicas en cada uno de ellos y otras que no muestran mayor diferencia, pero igual todas son útiles sin dejar de lado sus ventajas y desventajas; en éste terreno de gestion de bases de datos todos tienen algo bueno que ofrecer.


Postgresql fue el pionero en muchos de los conceptos existentes en el sistema objeto-relacional actual, incluido, más tarde en otros sistemas de gestión comerciales. PostGreSQL es un sistema objeto-relacional, ya que incluye características de la orientación a objetos, como puede ser la herencia, tipos de datos, funciones, restricciones, disparadores, reglas e integridad transaccional. A pesar de esto, PostGreSQL no es un sistema de gestión de bases de datos puramente orientado a objetos.


Características

Algunas de las principales características de este gestor de bases de datos son, entre otras:

  1. Implementación del estándar SQL92/SQL99.

  2. Soporta distintos tipos de datos: además del soporte para los tipos base, también soporta datos de tipo fecha, monetarios, elementos gráficos, datos sobre redes (MAC, IP), cadenas de bits, etc. También permite la creación de tipos propios.

  3. Incorpora una estructura de datos array.

  4. Incorpora funciones de diversa índole: manejo de fechas, geométricas, orientadas a operaciones con redes, etc.

  5. Permite la declaración de funciones propias, así como la definición de disparadores.

  6. Soporta el uso de índices, reglas y vistas.

  7. Incluye herencia entre tablas (aunque no entre objetos, ya que no existen), por lo que a este gestor de bases de datos se le incluye entre los gestores objeto-relacionales.

  8. Permite la gestión de diferentes usuarios, como también los permisos asignados a cada uno de ellos.



    Ventajas de usar PostgreSQL

    La mejor parte e incluso más significativa de este gestor son las ventajas que ofrece:

  9. A pesar de que la velocidad de respuesta pueda parecer deficiente en bases de datos pequeñas, esa velocidad se mantiene al aumentar el tamaño de la base de datos, cosa que no sucede con otros programas, que se enlentecen brutalmente.

  10. Instalación ilimitada: No se puede demandar a una empresa por instalarlo en más ordenadores de los que la licencia permite, ya que no hay costo asociado a la licencia de software.

  11. Estabilidad y confiabilidad

  12. Puede operar sobre distintas plataformas, incluyendo Linux, Windows, Unix, Solaris y MacOS X.

  13. Buena escalabilidad ya que es capaz de ajustarse al número de CPU y a la cantidad de memoria disponible de forma óptima, soportando una mayor cantidad de peticiones simultáneas a la base de datos de forma correcta.



    Desventajas de usar Postgresql


    Los mayores inconvenientes que se pueden encontrar en este gestor son:
  14. Es fácil de vulnerar sin protección adecuada.

  15. Es de 2 a 3 veces más lento que MySQL en inserciones y actualizaciones.

  16. Reducida cantidad de tipos de datos.

  17. Sin experiencia, configurar llega a ser un caos.


    Alta concurrencia



    Mediante un sistema denominado MVCC (Acceso concurrente multiversión, por sus siglas en inglés) PostgreSQL permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una visión consistente 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, eliminando la necesidad del uso de bloqueos explícitos.



    Amplia variedad de tipos nativos


    PostgreSQL provee nativamente soporte para:
  18. Números de precisión arbitraria.

  19. Texto de largo ilimitado.

  20. Figuras geométricas (con una variedad de funciones asociadas).

  21. Direcciones IP (IPv4 e IPv6).

  22. Bloques de direcciones estilo CIDR.
  23. Direcciones MAC.

  24. Arrays.


    Adicionalmente los usuarios pueden crear sus propios tipos de datos, los que pueden ser por completo indexables gracias a la infraestructura GiST de PostgreSQL.



    Instalación


    A continuación se listan los pasos para la instalación del gestor de bases de datos:

    1. Descargar el instalador desde http://www.postgresql.org.es/

    2. Ejecutar el instalador

    3. Seleccionar un directorio para almacenar los datos, podemos dejar las carpetas por defecto.

    4. Ingresar una contraseña

    5. Seleccionar la región con la que trabajará el proceso de la instalación, dejando la predefinida para menor complicación

    6. Esperar que se haya completado la instalación

    7. Terminada la instalación de PostgreSQL quitamos la selección de la última opción mostrada y damos clic en “Terminar”.

Todo esto es para una instalación típica de PostgreSQL 9.1 con configuraciones básicas pero funcionales (Como se muestra en el siguiente video).




Configuración de PostgreSQL -Cluster (Servidor)


Como primer paso se crea una carpeta en la unidad de destino donde se instalará el cluster; por ejemplo, se creó una carpeta llamada Cluster1 en la unidad C (C:\Cluster1). Paso siguiente, se agrega una variable de entorno la cual corresponde a la carpeta BIN del postgreSQL la cual corresponde a C:\Archivos de programa\PostgreSQL\9.1\bin

Para eso damos clic derecho a “Equipo”, luego en “Configuración avanzada del sistema”, en el cuadro de diálogo de Propiedades del sistema damos clic en el botón “Variables de entorno...”, luego en Variables del sistema buscamos y seleccionamos la  variable “Path” y le damos clic en editar y pegamos la dirección de la carpeta “bin” anteponiendo antes un “;” (punto y coma). Como último paso se le da Aceptar a todos los cuadros de diálogo que se abrieron.

Ahora en una consola (cmd) se digita el siguiente comando para crear el cluster:

initdb -D C:\Cluster1 (Donde Cluster1 Es la carpeta donde se aloja el cluster)
Luego se inicia con el comando:

            pg_ctl start -D C:\Cluster1
Luego de la instalación del servidor de bases de datos PostgreSQL existen tres archivos para configurar el servidor que son: 

  1. postgresql.conf

  2. pg_hba.conf

  3. pg_ident.conf. *(Para esta configuración no será necesario modificar éste archivo)




    Estos archivos establecen la manera en que se comporta e interactúa el servidor PostgreSQL y se encuentran ubicados generalmente en el directorio “C:\Archivos de programa\PostgreSQL\9.1\data” en Windows y en el directorio “/var/lib/pgsql/data” en Linux.

    Cabe recalcar que estos mismos archivos de configuración son los que aparecen y que se modifican en los cluster que se crean; es decir, que por cada cluster, se modifican esos archivos con extensión “.conf”; por ejemplo: Si se hace un cluster en la unidad C dentro de una carpeta de nombre MiCluster, la ruta de los archivos de configuración estarían en “C:\MiCluster/”.





 
A continuación se muestran los parámetros que se modifican en el archivo postgresql.conf para su funcionamiento más personalizado:



  • En listen_addresses se quita el # de la línea para des comentarlo y cambiamos el parametro listen_addresses =localhost’ a listen_addresses = ‘*’ para que pueda escuchar desde cualquier dirección IP.

  • De igual manera port=5432 se cambia al valor de 5445 ya que la instalación por defecto del postgresql se auto asignó el puerto 5432.

  • El parámetro max_connections = 100 tiene ese valor por defecto.

  • Al final guardamos los cambios en dicho archivo

  • Estos parámetros son modificados en los archivos .conf del cluster por supuesto.


    #------------------------------------------------------------------------------
    # CONNECTIONS AND AUTHENTICATION
    #------------------------------------------------------------------------------

    # - Connection Settings -

    listen_addresses = '*'            # what IP address(es) to listen on;
                        # comma-separated list of addresses;
                        # defaults to 'localhost', '*' = all
                        # (change requires restart)
    port = 5445                # (change requires restart)
    max_connections = 100        # (change requires restart)



El archivo pg_hba.conf se modifica en los parámetros siguientes:

  • Al final del archivo se encuentran los rangos de IP’s que el gestor va a permitir la conexión, es ahí donde agregamos una nueva línea similar a la loopback en ipv4 pero con la diferencia que tendrá la red o la IP del cliente que tendrá acceso ya sea a una o todas las bases de datos alojadas en el servidor y de igual manera a los usuarios que tendrán acceso a las mismas.

# TYPE  DATABASE        USER            ADDRESS                 METHOD


# IPv4 local connections:
host            all                 all             127.0.0.1/32                trust
host            all                 all             192.168.1.0/24            trust

# IPv6 local connections:
host            all                 all             ::1/128                         trust

# Allow replication connections from localhost, by a user with the
# replication privilege.

#host        replication     Wendy        127.0.0.1/32               trust
#host        replication     Wendy        ::1/128                         trust




Para la configuración de parte de un cliente para conectarse a un cluster remoto es el siguiente:


  1. Primero abrimos el pgAdmin para iniciar la aplicación de postgreSQL
  2. Se crea una nueva conexión desde el ícono con forma de “enchufe”.
  3. En el asistente, nos ubicamos en la ficha Properties e ingresamos el nombre del servidor, el host, el puerto por el cual escuchará el servidor y elegimos la base de datos a la cual nos conectaremos, el Username es el usuario el cual tiene permiso para autenticarse en el servidor remoto.
  4. Luego nos ubicamos en la ficha Advanced y quitamos los checkboxes activos y nuevamente agregamos la IP del servidor al que se conectará, al final se da clic en Aceptar y de ésta forma ya esta hecha la nueva conexión al servidor.
  5. En la nueva conexión creada damos clic derecho/Conectar
  6. En el cuadro de diálogo que aparece para conectar al servidor ingresamos la contraseña que tenemos asignada en nuestra máquina.
  7. Nos conectamos a la base de datos del servidor, en la cual está físicamente la base de datos.
    Ahora podremos crear o modificar tablas.

Ilustración de la Topologia realizada:

 



Grupo de Trabajo:




José Ricardo Interiano Ruíz



Wendy Iliana Luna López



Henry Alberto Quijano Peñate




Moisés Alejandro Pérez Chávez




Leer nota completa...

sábado, 19 de mayo de 2012

miércoles, 25 de abril de 2012

sábado, 21 de abril de 2012

Estructura de Almacenamiento en Oracle Database

Estructura de Almacenamiento en Oracle Database



Detalle del articulo completo a publicar

Leer nota completa...

jueves, 15 de marzo de 2012

viernes, 2 de marzo de 2012

Una dosis de normalizacion

Desde el punto de vista de los programadores, administradores de bases de datos, y demás afines a la informática, normalización es un paradigma con el cual se busca que una base de datos relacional minimice los problemas de coherencia de datos.


Este articulo busca refrescarnos las primeras formar normales, y abordar el primer paso en lo que muchos consideran formas normales avanzadas, no quiero profundizar en los detalles teóricos, pues esos los encuentran en los miles de libros aburridos de bases de datos que están en la red, en lugar de ello quiero llevarlos por un recorrido practico que nos dirija el día de hoy hasta la Forma Normal de Boyce-Codd. .


En primer lugar planteamos un escenario: un modelo entidad relación para registra las visitas que realizan los empleados a distintos inmuebles registrados en la empresa, el empleado visita la vivienda y elabora unas observaciones al respecto, para realizar las visitas al empleado se le proporciona un vehículo para el rápido desplazamiento, la tabla RevisionVivienda almacena la información referida a las revisiones realizadas. Dedique 1 minuto para observar la figura y los datos ejemplo de la tabla RevisionVivienda.



¿Identifico la anomalía en dicha tabla?

¿Aún no? Observe las visitas hecha el día 1-1-12 del empleado EACP, ahora imagine que ese día el empleado se equivocó al momento de registrar los datos, pues el no llevo el vehículo P1111, sino que utilizo para dichas visitas el carro Z2222. Si usted debe hacer esta corrección a los datos ¿cuantas tuplas tendría que modificar?

Ahí está el problema, debería, si el modelo fuera adecuado solo modificar una tupla, pero en lugar de ello, debe modificar en este caso 3 tuplas, a pesar que los Carros son asignados todo el día a un empleado.

Veamos paso a paso el proceso de normalización para la tabla RevisionVivienda y así solucionar la anomalía.

1FN:
            La tabla RevisionVivienda ya está en primera forma normal, posee una llave primaria, compuesta por el ID_Vivienda + Fecha y no tiene campos repetidos, importante es mencionar que una vivienda solo puede ser revisada una vez el mismo día, por ello se escogió esta llave primaria.

2FN:
            Veamos, esta cita que todos los campos que no son llave primaria, deben depender funcionalmente de toda la llave primaria, y no de una parte de ella, los campos ID_empleado, Observacion y Id_Carro, cumplen con esta condición, pues dependen de toda la llave primaria, no de una parte de ella.

3FN:
            Esta cita que aquellos campos que dependan transitivamente de la llave primaria por medio de otro campo, deben ser eliminados, veamos nuevamente los últimos 3 campos, ¿dependen transitivamente de otro campo? La respuesta es que NO, esta tabla si cumple la tercera forma normal.

Bueno y entonces qué pasa con nuestra anomalía, paso las primeras 3 formas normales. Para ello existe una solución, y es aplicar una tercera forma normal más fuerte, que se conoce como Boyce-Cod.

Forma Normal de Boyce-Codd:
            En forma sencilla cita, que debemos cumplir la condición que todo determinante en la tabla debe ser llave candidata, pues entonces veamos los determinantes que existen, y si alguno de ellos NO puede identificar de forma única una tupla, dicha dependencia funcional debe eliminarse de la tabla.

1.    Id_Vivienda + Fecha -> Id_empleado, Observacion, Id_Carro                  (llave primaria OK)
2.    Id_Vivienda + Id_Empleado + Fecha -> Observacion, Id_Carro                (llave candidata OK)
3.    Id_Empleado + Fecha -> Id_Carro                                                              ( Problema)

Observemos la tercera dependencia funcional, el Carro es asignado a un empleado en un día especifico, dicho empleado tendrá asignado todo el día ese carro para realizar sus visitas a las viviendas, pero esta dependencia funcional NO es una llave candidata de la relación, y ahí está el problema.

Para solucionarlo debemos tomar esta dependencia funcional y convertirla en otra tabla, de la cual será la llave primaria el determinante de la dependencia. La solución se muestra en la siguiente figura:




Noten que se quitó el campo Id_carro de la tabla RevisionVivienda, y se creó la nueva tabla AsignacionCarro.

Espero esta explicación les haya servido de mucho provecho, y como ven se ha explicado de manera sencilla y muy al grano, evitándonos horas y horas de leer páginas de un libro con muchos modelos matemáticos enredados. Esperamos en próximamente explicar la siguiente forma normal en otra dosis de normalidad.

Saludos...


Leer nota completa...

martes, 28 de febrero de 2012

Preparando el Entorno de Oracle Database 11g Z052- Cap 3

Oracle Database 11g. Entorno del gestor de bases de datos.. La actual presentacion describe las herramientas para administrar una base de datos Oracle 11g. ademas el plan y proceso de instalacion, asi como su asistente.


Cuerpo

Leer nota completa...

lunes, 27 de junio de 2011

HIBERNATE EN JAVA

Pasos a seguir para el acceso a la Base de Datos por medio de HIBERNATE....


Usando Hibernate en Java Swing Aplication
Creando la base de datos:

En este tutorial usaremos la base de datos mysql gratuita de netbeans llamada sakila, así que para agregarlo nos vamos al plugin manager de netbeans e instalamos y posteriormente activamos



Después de haber instalado el plugin nos vamos a la ventana de servicios para arrancar el mysql server y posterior con click derecho le damos en crear nueva base de datos:



Una vez agregada si no aparece conectada como en la imagen abajo la activamos mediante click derecho conectar:



Una vez la base de datos este lista procederemos a crear el proyecto.
Nos vamos a New Proyect, seleccionamos Java Aplicaction de la opción Java y le damos siguiente




En la siguiente ventana escribimos el nombre del proyecto (en este ejemplo le llamaremos hibernate_ejemplo), deseleccionamos la opción Use Dedicated Folder, deseleccionamos Create Main Class, y le damos en finalizar



Ahora como siguiente paso le agregaremos el soporte de hibernate a nuestro proyecto agregando las librerías de hibernate, desde el menú projects le damos click derecho al paquete de librerías y le damos en la opción Add Library y seleccionamos las librerías de hibernate en el cuadro de dialogo mostrado


Ya tenemos agregadas las librerías asi q procedemos a crear los archivos de configuración necesarios para hibernate, le damos click derecho al archivo del proyecto y le damos click a Other en la opción New. Ahora en la ventana de New File le damos seleccionamos hibernate y luego Hibernate Configuration Wizard y le damos siguiente.



En la siguiente ventana dejamos la configuración por defecto y le damos siguiente:


En la siguiente ventana en la opción de Database Connection seleccionamos Sakila de las opciones y luego click en finalizar.



Con esto se habrá creado un archivo hibernate.cfg.xml dentro de nuestro proyecto y procederemos a cambiarle algunas opciones en la configuración. En la sección de Optional Properties buscamos Configuration Properties lo expandimos y le damos Add:



Luego buscamos la opción Miscellaneous Properties la expandimos y le damos click en Add y selecionamos la opción hibernate.query.factory_class como Property Name y también seleccionamos org.hibernate.hql.classic.ClassicQueryTranslatorFactory como Property Value


Si le damos en la vista de XML podremos observar algo parecido a lo siguiente:

Siempre es aconsejable guardar los cambios después de agregar algo nuevo por cualquier catástrofe que pueda suceder (=P)

Como siguiente paso agregaremos el archivo HibernateUtil.java, dando click derecho en el pequete fuente del proyecto, click en New y luego en Other, aparecerá la ventana de nuevo archivo, seleccionamos hibernate y luego seleccionamos HibernateUtil.java y le damos click en siguiente:


En la siguiente ventana escribimos HibernateUtil como nombre de la clase y sakila.util como nombre del paquete y le damos en finalizar:


Ahora crearemos el archivo Reverse Engineering, nos vamos nuevamente al archivo fuente del proyecto, le damos click derecho, New y luego Other, veremos nuevamente la ventana de selección de archivo nuevo, ahí seleccionamos Hibernate Reverse Engineering Wizard en el listado desplegado de hibernate y damos click en siguiente:

En la ventana siguiente escribimos hibernate.reveng en File Name y click en siguiente:

Ahora en esta nueva ventana seleccionamos la tabla Actor de las tablas disponibles y le damos agregar y luego finalizar:

Ahora solo nos falta un archivo de configuración asi que, nuevamente nos vamos al origen del proyecto, le damos click derecho y seleccionamos New y luego seleccionamos Other, nos aparecerá el menú de selección de archivo nuevo, seleccionamos hibernate y luego Hibernate Mapping Files and POJOs

En esta nueva ventana seleccionamos las opciones de manera que quede de la siguiente manera:

Ahora que ya tenemos los archivos de configuración solo nos resta agregar una interfaz grafica esto lo hacemos de la siguiente manera:

Dejamos las configuraciones de la siguiente manera:


Una vez le damos en finalizar ya podemos agregar etiquetas, botones, cajas de texto y también una tabla de manera que se pueda ver de la siguiente forma:

Ahora procederemos a hacer unas consultas en el editor HQL Query, nos vamos a los archivos del proyecto, expandimos el default package, y le damos click derecho a hibernate.cfg.xml y seleccionamos Run HQL Query


En este editor veremos como se hacen las consultas usando hibernate. Y podemos probar el editor de la siguiente manera:

Ahora bien realizaremos un par de consultas:

from Actor a where a.firstName like 'PE%'
from Actor a where a.lastName like 'MO%'

Nos mostrara los siguientes resultados:



Ahora solo nos resta agregarle unas cuantas líneas de código:
private static String Busqueda_Basada_En_Nombre="from Actor a where a.firstName like '";
private static String Busqueda_Basada_En_Apellido="from Actor a where a.lastName like '";

private void runBusquedaBasadaEnNombre () {
executeHQLQuery(Busqueda_Basada_En_Nombre + jTextField1.getText() + "%'");
}

private void run BusquedaBasadaEnApellido () {
executeHQLQuery(Busqueda_Basada_En_Apellido+ jTextField2.getText() + "%'");
}

private void executeHQLQuery(String hql) {
try {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Query q = session.createQuery(hql);
List resultList = q.list();
displayResult(resultList);
session.getTransaction().commit();
} catch (HibernateException he) {
he.printStackTrace();
}
}

Nos quedara de la siguiente manera:


Agregamos estas líneas también

private void displayResult(List resultList) {

Vector tableHeaders = new Vector();

Vector tableData = new Vector();

tableHeaders.add("ActorId");

tableHeaders.add("FirstName");

tableHeaders.add("LastName");

tableHeaders.add("LastUpdated");

private void displayResult(List resultList) {

Vector tableHeaders = new Vector();

Vector tableData = new Vector();

tableHeaders.add("ActorId");

tableHeaders.add("FirstName");

tableHeaders.add("LastName");

tableHeaders.add("LastUpdated");


for(Object o : resultList) {

Actor actor = (Actor)o;

Vector oneRow = new Vector();

oneRow.add(actor.getActorId());

oneRow.add(actor.getFirstName());

oneRow.add(actor.getLastName());

oneRow.add(actor.getLastUpdate());

tableData.add(oneRow);

}

jTable1.setModel(new DefaultTableModel(tableData, tableHeaders));

}”

Tambien las siguientes líneas en el queryButton al darle doble click al botón de nuestro formulario

private void queryButtonActionPerformed(java.awt.event.ActionEvent evt) {

if(!firstNameTextField.getText().trim().equals("")) {

runQueryBasedOnFirstName();

} else if(!lastNameTextField.getText().trim().equals("")) {

runQueryBasedOnLastName();

}

}

Nos quedara de la siguiente manera:


Con eso hemos agregado todo lo necesario, solo nos hace falta correr el proyecto. Pero para eso necesitamos agregar algo mas, nos vamos al archivo fuente del proyecto le damos click derecho y luego click en propiedades, nos vamos a la opción run y en Main Class digitamos sakila.ui.hibernate_ejemplo, le damos ok y listo ya podemos correr la aplicación. Y con esto terminamos con el ejemplo. Gracias por leer este ejemplo.


AZENON FLORES, JOSE MAURICIO (josephmazf.7@gmail.com)

CONTRERAS CRUZ, HECTOR FERNANDO (hfernando.c@gmail.com)

FLORES RODRIGUEZ, DAVID ROMEO (drflores19@gmail.com)

MARTINEZ GUTIERREZ, DAVID ARTURO (davicitogospel@gmail.com)



Leer nota completa...