Modulado 3.0

if (bored) try { while ( ! ( this.succeed() )) } catch ( IhaveSoMuchTimeException e) {};

Archivos por Etiqueta: PostgreSQL

Modelos Entidad Relación con Power Architect

Existe una gran oferta de herramientas Open Source para generar diagramas E-R. De las que conozco hoy he elegido Power Architect para dar un poco a conocer las características de esta gran herramienta. 

Desarrollada en Java y distribuida bajo licencia GPLv3, la convierte en una aplicación ideal si estás buscando una herramienta que sea multiplataforma, ya que está disponible para Linux, Windows y Mac OS X. Pero no es precisamente esta característica la que la hace destacable, es sobre todo que está diseñada para poder trabajar con diferentes Bases de datos: Oracle 8i, Oracle 9i, Oracle 10g, PostgreSQL, MySQL, SQL Server y DB2. 

Power Architect es algo más que una simple aplicación para generar diagramas E-R, pudiendo destacar la posibilidad de generar los scripts de creación de tablas, procedimientos, etc (Fordward Engineering) para los modelos de datos, recuperar dichos modelos de una base de datos existente, o dicho de otra forma, Ingeniería inversa (Reverse Engineering), analizar estructuras de datos entre diversos modelos de datos para ver las diferencias y similitudes, creación de perfiles, etc. Con lo cual, hablamos de una herramienta perfecta para DBAs (Administradores), analistas y diseñadores.

 

Para más información podéis visitar cualquiera de los siguientes enlaces:

Página de Power*Architect: http://www.sqlpower.ca/page/architect

Página del proyecto: http://code.google.com/p/power-architect/

Anuncios

PostgreSQL: Mitos que se desvanecen (II)

En el artículo anterior comprobamos que cuando trabajamos con un CMS como Drupal, los request (peticiones) que le hacemos al servidor web son ligeramente mas rápidos cuando nuestro CMS usa como base de datos MySQL. Ahora bien, ¿que ocurriría si aumentamos el peso de la base de datos y dificultamos las consultas SQL? La cosa cambia notablemente, y es que es precisamente en este tipo de situaciones donde podemos notar la grandeza de Postgresql.

Para esta segunda parte, he usado una base de datos con dos tablas, de mas de 10K de registros cada una. Operaciones sencillas como:

MySQL: SELECT * FROM a ORDER BY RAND() LIMIT 5 ;
PostgreSQL: SELECT * FROM a ORDER BY RANDOM() LIMIT 5;

Se ejecutan verdaderamente rápido en ambos. Mientras que, si por el contrario efectuamos

SELECT count(otro_id)
FROM a
where otro_id > (select otro_id from b order by rand() limit 1);

La sorpresa es mayúscula teniendo como tiempo de respuesta ni más ni menos que:
+----------------+
| count(otro_id) |
+----------------+
| 4879           |
+----------------+
1 row in set (1 min 52.85 sec)

Mientras que en PostgreSQL la consulta dio el siguiente resultado:

count
-------
3100
(1 row)

Time: 8,856 ms

Pero, supongo que mas de uno se estará preguntando… ¿No será cosa del rand() y el randmon()? Pues ejecutemos otra consulta en ambos gestores sin el uso de funciones rand() ni random().

Ejecutemos la siguiente consulta:

select count(*)
from a
where otro_id not in (select otro_id from b);

Resultados:

PostgreSQL: (1 row) Time: 10,176 ms | MySQL:  1 row in set (35.88 sec).

Conclusion, ¿Quién es más rapido? ¿MySQL, PostgreSQL? Ambos son buenos sistemas gestores de bases de datos, pero como todo, dependerá de muchos factores la velocidad de cada uno. Como la configuración de hardware, el tipo de base de datos con la que vayamos a trabajar.

Lo que si quería demostrar con este artículo es que postgresql puede ser contundentemente rápido frente a MySQL, mientras que MySQL realmente es sólo ligeramente más rápido que Postgres cuando hablamos de base de datos para CMS.

Por otra parte, y después de haber comentado el tema con unos amigos, me gustaría matizar que obviamente aquí la lectura importante que debemos sacar es que cuando estamos pensando en elegir un sistema gestor de bases de datos u otro, hay muchos factores a tener en cuenta. Por ejemplo, en este articulo podemos sacar una lectura clara, PostgreSQL trabaja muy bien con bases de datos muy relacionales mientras que MySQL hasta el momento aun anda un poco cojo. Como muy bien comenta María paulina, también dependerá del proyecto, de la inversión que podamos afrontar y de nuestras necesidades. Por eso, hay que desmitificar y evitar el hacer comentarios del tipo X es mas rápido de Y, puesto que como todo en la vida real, dependerá de los factores y las variables en las que se vea involucrado.

PostgreSQL: Mitos que se desvanecen

Hoy me pasado casi toda la mañana haciendo benchmarks, quería probar el rendimiento  de un sitio web (con drupal como cms) y quería probar el rendimiento precisamente usando MySQL y PostgreSQL.

Para las pruebas he usado:

  • un Athlon64 (x2) 5200+ con 2Gb de ram, discos duros SATA2 de 320Gb.
  • Sistema Operativo: Ubuntu 8.04 (LTS)  x86_64
  • MySQL Server: 5.0.51a-3ubuntu5
  • PostgreSQL: 8.3.1-1
  • Apache2: 2.2.8-1
  • PHP5: 5.2.4-2ubuntu5.3
  • Drupal 6.6

El benchmark ha consistido en una serie de ataques al servidor con ab (Apache Benchmark), usando primero drupal con mysql y posteriormente con postgresql. He ido cambiando el numero de peticiones (requests) y la concurrencia para comparar valores. Como aun no he tenido tiempo de generar las gráficas solo daré un pequeño resumen de los datos que he obtenido.

webpreview_htm_m2cc93b66Como se puede apreciar en el gráfico, ambos mantienen cierta linealidad en la primera etapa del benchmark, Aumentando significativamente el Nº de peticiones por segundo en cuanto se aumentó la concurrencia en ambos. Como durante ésta etapa del benchmark cargamos el mismo contenido, por eso podemos apreciar también cierta paralelidad entre ambos.

Ahora bien, pasemos a la segunda parte.

Diseña tus bases de datos en PostgreSQL con pgDesigner

En un post anterior hablaba sobre aplicaciones para generar diagramas entidad-relación para posteriormente poder crear nuestra base de datos, generando scripts para la creación de las tablas.

Hoy vamos a ir un poquito mas lejos con pgDesigner. Con esta herramienta, además de los antes mencionados diagramas E-R, podremos centrarnos aún más en el diseño de la base de datos, con la posibilidad de definir disparadores (triggers), stored procedures, vistas, etc. Además, podremos manejar varios proyectos al mismo tiempo, copiar objetos de un proyecto a otro, obtener datos de una base de datos mediante ingenieria inversa, todo esto y muchas más opciones, ya que se trata de una herramienta muy completa con la que podremos trabajar directamente sobre nuestro servidor PostgreSQL, soportando las versiones desde 7.0 a 8.2.

pgDesigner está desarrollado en gambas (Sé que a algunos, sobre todo a los que nunca hayais oido hablar de este proyecto os resultará gracioso el nombre) por lo que para poder utilizar esta herramienta el único requisito que deberemos cumplir será tener instalado el entorno completo de desarrollo para gambas o las librerías de sun de desarrollo de gambas2. En mi caso, lo único que hice en mi ubuntu fue ejecutar:

$ sudo apt-get install gambas2

También podréis descargarlo de la web oficial del proyecto: http://gambas.sourceforge.net.

La última versión de pgDesigner podreis descargarlo desde aquí.

Herramientas de diseño de Modelos Entidad-Relación Open Source

Llevo tiempo buscando por Internet una solución Open Source para el diseño y modelado de diagramas E-R que además permita exportar el M.E-R a scripts de creación de tablas para diferentes SGBD, pero principalmente PostgreSQL.

Empecé mi búsqueda en la web oficial de PostgreSQL, y allí encontré unas cuantas noticias de versiones recientes de aplicaciones para hacer diseños con soporte para PostgreSQL (entre otros), pero… se trataba de aplicaciones propietarias con versiones de prueba. Así que me di un paseo por sourceforge y freshmeat, y allí encontré una serie de aplicaciones Open Source, pero la verdad, dejaban un poco que desear.

Finalmente encontré DB Designer Fork, que como su propio nombre implica, se trata de un fork de DB Designer. DB Designer está pensado principalmente para trabajar con MySQL. Si es el caso, y lo que queremos es trabajar con MySQL entonces la solución que buscamos es

Db Designer Fork tiene todo lo necesario para no echar en falta estas aplicaciones comerciales de uso profesional, el problema, es que tengo que matizar que esta herramienta está bastante bien si lo que pretendes es hacer diseños de bases de datos no muy grandes, como podría serlo una biblioteca, la gestión de un videoclub, etc.

Existen gran cantidad de aplicaciones para el modelado, desde diagramas en UML a incluso aplicaciones que te sacan el diseño haciendo ingeniería inversa a tu base de datos. Dependiendo si nos queremos gastar la pasta o no podremos escoger entre una gran variedad de aplicaciones. A continuación dejaré un listado de las opciones Open Source mas viables:

DB Designer Fork Link
MySQL Workbench Link
DDT (Database Design Tool) Link
Open System Architect Link
PG Designer Link
Power*Architect Data modeling tool Link