• No se han encontrado resultados

PostgreSQL & MySQL Analisis FODA

N/A
N/A
Protected

Academic year: 2021

Share "PostgreSQL & MySQL Analisis FODA"

Copied!
28
0
0

Texto completo

(1)

PostgreSQL & MySQL

Analisis FODA

(2)

Quienes somos?

Guido Barosio

- Gerente de Ingeniaría de Sistemas & PostgreSQL Nerd

Emanuel Calvo Franco

- MySQL, PostgreSQL & Oracle DBA

Mariano Reingart

- Desarrollador PostgreSQL & Python

Grupo de Usuarios PostgreSQL

Argentina

(3)

Breve Historia

TcX, evolución de UNIREG, Michael “Monty” Widenius Posteriormente MySQL AB

Sun Oracle Universidad de California,

proyecto Ingres, Michael Stonebreaker

(propulsor Bases de datos Objeto Relacionales)

PostgreSQL es una comunidad

MySQL Est.1994 PostgreSQL Est. 1985 Postgres + SQL 1995

(4)

Sobre Licencias

Licencia Dual

GPL para software libre Comercial ($$$)

MySQL Enterprise dde USD 599 por año por servidor

BSD

Libre incluso para usos comerciales

MySQL PostgreSQL

(5)

Algunas comparaciones Nivel de Aislamiento: REPEATABLE-READ SERIALIZABLE READ UNCOMMITTED READ COMMITTED Nivel de Aislamiento: READ UNCOMMITTED* READ COMMITTED REPEATABLE-READ* SERIALIZABLE Procedimientos a partir de version 5.1 Procedimientos nativo (PL) Transacciones ACID nativo con InnoDB/DBD * Transacciones ACID

nativo (MVCC)

Sub-selects a partir de version 4.1 (*)

Sub-selects nativo

Cumple algunas partes de ANSI SQL

(6)

Algunas comparaciones

Indices

BTREE*, HASH, RTREE

SPATIAL

fulltext (solo MyISAM) prefijos

Indices

BTREE, HASH, GiST, GIN (y del usuario)

bitmap, fulltext* parciales y expresiones Lenguaje Procedural SQL propio Pl/PgSql (portable), Pl/Perl, Pl/Python, ... Campos AutoIncrement (único, indizado, positivo) Secuencias

(extra transacción)

Geométricos, Arrays, (nativo) etc., y del

Usuario

Tipos de datos Básicos Tipos de datos Básicos,

Avanzados y Objetos

Solo Números, Strings y Fechas/Horas

(7)

Mas comparaciones Point-in-Time Recovery Binary Log* Point-in-Time Recovery WAL (anticipado) Threads (hilos) fork (procesos) -Roles Cursores read only Cursores nativo Full joins y vistas Triggers nativo a partir de version 5.1 Triggers nativo Full joins y vistas a partir de 5.x (*)

(8)

Mas comparaciones PREPARE (solo parseo) PREPARE (planeamiento) -RULES (reglas) (no programables) Operadores y Casts REPARE TABLE (reparar tablas ante crashs) (wtf? postgresql no daña los datos)

Optimizador (avanzado) Señales LISTEN y NOTIFY (mensajes/señal es) Optimizador (básico)

(9)

Motores de Almacenamiento ISAM (obsoleta) MyISAM (default) InnoDB NDB (disable) BDB CSV ARCHIVE MEMORY FEDERATED Maria (v.6 alpha) BerkeleyDB (obsoleta) Postmaster :) MySQL PostgreSQL

(10)

Analisis FODA - Fortalezas Escalabilidad replicacion, clustering Flexibilidad Multiples Motores de Almacenamiento Velocidad sin integridad / concurrencia Integridad PITR - WAL Concurrencia multiples usuarios -escritura MVCC Funcionalidad tipos (OO), reglas, lenguajes embebidos MySQL PostgreSQL

(11)

Analisis FODA - Oportunidades

Nuevos Motores de Almacenamiento

(Maria/Falcon?) Gran aceptación por parte del mercado (11

millones de instalaciones) MySQL PostgreSQL MySql -> Sun -> Oracle: forks: MariaDB, Drizzle, ... Estable y Sólido (MySQL 5.1 != bug free)

(12)

Analisis FODA - Debilidades (Modelo de Arquitectura) SQL rudimentario Planner Basico MyISAM no soporta FKs (roadmap 5.2) Soporte Comercial Ausencia de replicacion nativa (roadmap 8.5) Ausencia de cluster nativo MySQL PostgreSQL

(13)

Analisis FODA - Amenazas

Oracle compra InnoDB Oy

Sun Compra MySQL Oracle compra SUN

... MariaDb ? FireBird ? Oracle ? MySQL PostgreSQL

(14)

Links relacionados

Why PostgreSQL Instead of MySQL: Comparing Reliability and Speed in 2007

(wiki de PostgreSQL)

http://monty-says.blogspot.com/2008/11/oops-we-did-it-again-mysql-51-released.html

(blogs de uno de los fundadores de MySQL sobre los errores de la versión 5.1)

(15)

Benchmark

El Mito:

MySQL máz veloz que Postgres

La Realidad:

(16)

Benchmark

Entorno:

Hardware: EEEPC 1000HA ("Netbook") CPU: Intel Atom N270 1.600 GHz

Memoria: 1GB, Disco: 160GB 5400 RPM Software:

Sistema Operativo: DEBIAN GNU/Linux 5.0 (Lenny - Estable)

Bases de datos:

PostgreSQL 8.3.7 (estable en Debian) MySQL 5.0.51a-24 (estable en Debian) Lenguaje de Programación: Python 2.5.2 Conectores:

PsycoPg2 2.0.7 MySQLdb 1.2.2

(17)

Benchmark

Ejemplo: aplicación simple con varios hilos en Python

Esquema PostgreSQL:

CREATE TABLE prueba (id SERIAL PRIMARY KEY, texto TEXT, flotante FLOAT, entero INTEGER, fecha TIMESTAMP DEFAULT now())

Esqumea MySQL:

CREATE TABLE prueba (id INTEGER

AUTO_INCREMENT PRIMARY KEY, texto TEXT, flotante FLOAT, entero INTEGER, fecha

TIMESTAMP DEFAULT now()) ENGINE=INNODB;

(18)

Benchmark

Conexión:

myconnect = lambda: MySQLdb.connect(db=" benchmark", user="root", passwd="m" ,host=" localhost")

pgconnect = lambda: psycopg2.connect

(database="benchmark", user="postgres", password="m", host="localhost")

(19)

Benchmark

Hilo de medición (benchmark): class BenchmarkSelect(Thread):

"Hilo para timing de SELECT" def run(self):

cn = self.connect() cur = cn.cursor()

cur.execute("SELECT * FROM prueba") for row in cur:

#print self.nro, row pass

cn.close()

Ambos usan el mismo, interfaz DbApi 2.0 de Python

(20)

Benchmark

Inicialización: insertar 10.000 registros cn = connect()

cur = cn.cursor()

cur.execute("DELETE FROM prueba") for x in range(10000):

cur.execute("INSERT INTO prueba (texto,

entero, flotante) VALUES (%s,%s,%s)", ("hola % s" % x, int(x), float(x)))

(21)

Benchmark

Función de medición: inicar n hilos y esperarlos def bench(cant ,connect, benchmark):

threads = []

for i in range(cant):

thread = benchmark(connect, i) # creo el thread

threads.append(thread) thread.start()

for thread in threads:

thread.join() # espero que termine

Nota: los threads en python dependen del GIL (su granularidad es por "instrucción python" y no

(22)

Benchmark

Resultados base de datos "trivial" (1000 registros, 10 hilos, poca carga):

(23)

Benchmark

Resultados base de datos menos trivial (10.000 registros):

(24)

Benchmark

Resultados base de datos menos trivial, con aprox. 100 hilos

(25)

Benchmark

Resultados base de datos menos trivial, con aprox. 10 hilos, en WINDOWS:

(26)

Benchmark

Algunas conclusiones (para esta aplicación):

PostgreSQL y MySQL pueden tener rendimientos similares para bases de datos "no triviales"

PostgreSQL puede ser incluso más velóz en general (para bases de datos "no triviales")

PostgreSQL puede ser significativamente más veloz a medida que la concurrencia se

incrementa (nº de hilos o "clientes"), para bases de datos "no triviales"

(27)

Benchmark

Observaciones:

Solo analizamos un SELECT trivial, sin joins, indices, funciones, etc. (donde PostgreSQL tendría que estar mejor preparado por su optimizador más avanzado)

No analizamos concurrencia de INSERT, UPDATE y DELETE (donde PostgreSQL aprovecha MVCC)

No optimizamos ni PostgreSQL ni MySQL No optimizamos el Sistema Operativo

Y, obviamente no analizamos caracteristicas

que son posibles de hacer solo en PostgreSQL :) YMMV

(28)

Preguntas?

Guido Barosio

Emanuel Calvo Franco Mariano Reingart

Referencias

Documento similar

Por las características que presenta el gestor de base de datos PostgreSQL 8.2.4.1 y por las políticas que establece el Polo Petrosoft, fue que se decidió usar este en el

En el capítulo se describirá la Guía para la personalización de PostgreSQL 8.4, para lo que se definirá el procedimiento para la instalación y configuración

En esta figura se puede apreciar cuales son los índices menos usados en el proyecto y el espacio en discos que dichos índices están ocupando, por lo que se pueden tomar

El proyecto MCHC gestionará un gran volumen de información por lo que se escoge para el desarrollo del sistema al SGBD PostgreSQL por ser un poderoso sistema manejador de bases

25 Y por último se decide utilizar como servidor de base de datos PostgreSQL: ya que este está ampliamente considerado como uno de los sistema de bases de datos de

Como hipótesis se parte de la idea de que si se desarrolla una aplicación web, basada en un Gestor de Bases de Datos potente y eficaz como el PostgreSQL, y un intérprete rápido

Con este objetivo, el pasado año se comenzó a trabajar en un software para la replicación de la información de bases de datos en PostgreSQL, obteniéndose con ello

Como Sistema de Gestión de Bases de Datos se empleó el MySQL 5.0, utilizando la librería ADOdb que proporciona el lenguaje PHP 5.0 para el acceso a los datos y el Apache 2.2