postgresql: un motor impulsado por una comunidad

25
Un motor impulsado por una comunidad. Santiago Zarate @foursixnine 0416- 9113678 santiago·@zarate.net.ve http://blog.santiago.zarate.net.ve

Upload: santiago-zarate

Post on 04-Jul-2015

1.795 views

Category:

Technology


2 download

DESCRIPTION

Una charla sobre PostgreSQL, La comunidad que se encuentra detras, paseo por algunas funcionalidades interesantes y finalmente recursos y donde encontrar mas informacion

TRANSCRIPT

Page 1: PostgreSQL: Un motor Impulsado por una comunidad

Un motor impulsado por una comunidad.

Santiago Zarate@foursixnine0416- 9113678

santiago·@zarate.net.vehttp://blog.santiago.zarate.net.ve

Page 2: PostgreSQL: Un motor Impulsado por una comunidad

Antes de comenzarSobre PostgreSQL:

✔ Tiene sus inicios como Postgres95 en 1995✔ Cambio de nombre en 1997 a PostgreSQL

✔ Ultimas versiones✔ 9.0.3 8.4.7 8.3.14 8.2.20 9.1apha-5

✔ Licenciamiento TPL (The PostgreSQL Licence)✔ Excelente documentacion

Page 3: PostgreSQL: Un motor Impulsado por una comunidad

✔ Es una Comunidad, no pertenece a ninguna compañia✔ PostgreSQL Development Group✔ Cientos de Usuarios en todo el mundo

✔ Desarrollo del Motor y nuevas funcionalidades✔ Documentacion✔ Aplicaciones✔ Correccion de errores✔ Traduccion

Antes de comenzarSobre PostgreSQL: ¿Quienes estan detras?

Page 4: PostgreSQL: Un motor Impulsado por una comunidad

Antes de comenzarSobre PostgreSQL: La gente

Page 5: PostgreSQL: Un motor Impulsado por una comunidad

Antes de comenzarSobre PostgreSQL: Quienes lo Utilizan.

✔ Es utilizado por gente grande

Page 6: PostgreSQL: Un motor Impulsado por una comunidad

Antes de comenzarSobre PostgreSQL: ¿Quienes Colaboran?

✔ Empresas que Colaboran

Page 7: PostgreSQL: Un motor Impulsado por una comunidad

Entrando en materiaFuncionalidades:

✔ ACID✔ Atomicity, Consistency, Isolation and Durability✔ Atomicidad, Consistencia, Aislamiento y Durabilidad

✔ Window Functions✔ Querys Recursivos y Common Table Expressions✔ PITR (Point in Time Recovery)✔ Extensible:

✔ PL's (Lenguajes Procedurales)✔ Directorio contrib/✔ Soportado por: ✔ Java (JDBC), ODBC, Perl, Python, Ruby, C, C++, PHP,

Lisp, Scheme, y Qt (Por nombrar algunos)✔ Es Seguro

Page 8: PostgreSQL: Un motor Impulsado por una comunidad

Lenguajes Procedurales

✔ pl/pgsql✔ pl/perl✔ sql✔ pl/python✔ pl/tcl

Nativos

CREATE OR REPLACE FUNCTION test_munge() RETURNS SETOF test AS $$ my $rv = spi_exec_query('select i, v from test;'); my $status = $rv->{status}; my $nrows = $rv->{processed}; foreach my $rn (0 .. $nrows - 1) { my $row = $rv->{rows}[$rn]; $row->{i} += 200 if defined($row->{i}); $row->{v} =~ tr/A-Za-z/a-zA-Z/ if (defined($row->{v})); return_next($row); } return undef;

$$ LANGUAGE plperl;

CREATE FUNCTION make_pair (name text, value integer) RETURNS named_valueAS $$ class named_value: def __init__ (self, n, v): self.name = n self.value = v return named_value(name, value) # or simply class nv: pass nv.name = name nv.value = value return nv

$$ LANGUAGE plpythonu;

Page 9: PostgreSQL: Un motor Impulsado por una comunidad

Lenguajes Procedurales

No Nativos

✔ pl/lua✔ pl/php✔ pl/r✔ pl/javascript✔ pl/lolcode✔ pl/scheme✔ pl/java✔ pl/*

CREATE FUNCTION counter() RETURNS int AS $$ while true do upvalue = upvalue + 1 coroutine.yield(upvalue) endenddo upvalue = 0 -- counter counter = coroutine.wrap(counter)$$ LANGUAGE pllua;

CREATE FUNCTION js_gen_series(mn FLOAT8, mx FLOAT8) RETURNS SETOF FLOAT8 AS $$ while (mn <= mx) { yield mn; mn += 1; } $$;LANGUAGE pljs

Page 10: PostgreSQL: Un motor Impulsado por una comunidad

Lenguajes Procedurales

Razones para utilizarlos

✔ Flexibilidad a la hora de familiarizarse con el motor✔ Reduce la curva de aprendizaje del desarrollador (Utility)✔ Agrega soporte para realizar “tareas esotericas” * ✔ Encapsulado no implica reducido.

✔ Acceso a otras tablas/bases de datos ✔ SPI ✔ Dbi✔ Psycopg2✔ jdbc

Page 11: PostgreSQL: Un motor Impulsado por una comunidad

Lenguajes Procedurales

Razones para nono utilizarlos

✔ Añade dependencias extra✔ Agrega otro paso al Mantenimiento✔ Comunidades pequeñas *✔ Posible uso malintencionado

✔ Y sin embargo...

Page 12: PostgreSQL: Un motor Impulsado por una comunidad

Funcionalidades

P.I.T.R. - Point in Time Recovery

✔ ¿Su sistema tuvo una falla de energia, o reinicio no programado?✔ ¿Se daño su disco de respaldos y necesita revertir a un estado anterior su base de datos principal?✔ ¿No desea utilizar un Sistema de Control de Versiones para Postgres?

P.I.T.R. - Point in Time Recovery – Es la solucion✔ Solo con contar con PostgreSQL 8.2 en adelante✔ WAL activo✔ Un poco de tiempo y paciencia

Page 13: PostgreSQL: Un motor Impulsado por una comunidad

Funcionalidades

Hot Standby

✔ Similar el Active Data Guard de Oracle✔ Solo que mejor.

✔ Facil de Configurar✔ Va de la mano con Streaming Replication

✔ Si, Replicas (Asincronas) de la data en vivo, sin “extras”

Page 14: PostgreSQL: Un motor Impulsado por una comunidad

Funcionalidades

Streaming Replication

✔ Servidores (Maestros y esclavos) con caracteristicas similares.✔ Los esclavos no escribiran datos✔ Necesito solo 1 esclavo.✔ Quiero que el esclavo sea exactamente igual al maestro.

Si respondio que si a las anteriores: Streaming Replication esta disponible ( 9.x )

Page 15: PostgreSQL: Un motor Impulsado por una comunidad

Funcionalidades

Streaming Replication

✔ Síncrona✔ No hay perdida de datos al momento de una falla

✔ Se basa en los logs (WAL)✔ Sin restricciones funcionales en el SQL✔ Robusto, simple y facil de implementar

✔ Bajo impacto en operaciones✔ Similar a Oracle Real Application Clusters✔ Failover extremo (15 segundos)

Page 16: PostgreSQL: Un motor Impulsado por una comunidad
Page 17: PostgreSQL: Un motor Impulsado por una comunidad

Funcionalidades

Funciones de Ventana – Window Functions

SELECT n.customer_id, n.order_id, n.order_total, COALESCE(SUM(o.order_total),0) As past_order_total

FROM orders AS n LEFT JOIN orders AS o ON (o.customer_id = n.customer_id AND n.order_datetime > o.order_datetime)

GROUP BY n.customer_id, n.order_datetime, n.order_id, n.order_total

ORDER BY n.customer_id, n.order_datetime, n.order_id;

Page 18: PostgreSQL: Un motor Impulsado por una comunidad

SELECT n.customer_id, n.order_id, n.order_total, SUM(n.order_total) OVER (PARTITION BY n.customer_id ORDER BY n.order_datetime) - n.order_total

as past_order_total

FROM orders AS n ORDER BY n.customer_id, n.order_datetime, n.order_id;

Funcionalidades

Funciones de Ventana – Window Functions

Page 19: PostgreSQL: Un motor Impulsado por una comunidad

Funcionalidades

Funciones de Ventana – Window Functions

Page 20: PostgreSQL: Un motor Impulsado por una comunidad

Funcionalidades

Funciones de Ventana – Window Functions

Page 21: PostgreSQL: Un motor Impulsado por una comunidad

Herramientas

Facilitando el trabajo y ampliando las posibilidades

✔ Replicacion y Clustering✔ PostgreSQL 9.x✔ Slony-I✔ PGCluster✔ Burcado✔ Skytools (Skype)✔ Mamooth – replicator✔ Rubyrep✔ PL/Proxy✔ PostgresForest✔ Tungsten

Page 22: PostgreSQL: Un motor Impulsado por una comunidad

Herramientas

Facilitando el trabajo y ampliando las posibilidades

✔ Monitoreo✔ Top y hotp✔ Nagios + check_postgres (endpoint)✔ pgFouine✔ Munin✔ Pgsnmpd✔ pg_top✔ tail_n_mail✔ grep/sed/awk

Page 23: PostgreSQL: Un motor Impulsado por una comunidad

✔ Interfaces Graficas de Usuairo: Acceso y Diseño✔ PgadminIII✔ PhpPgAdmin✔ Druid III * ✔ Tora✔ Psql✔ PgAccess✔ SQrrieL SQL✔ split_postgres_dump

Herramientas

Facilitando el trabajo y ampliando las posibilidades

Page 24: PostgreSQL: Un motor Impulsado por una comunidad

✔ PostgreSQL es Multiplataforma✔ No tiene precio – www.postgresql.org✔ Sirve para practicar la lectura en ingles:

✔ Www.postgresql.org/docs/ ✔ Wiki.postgresql.org

✔ Cuenta con su propia forja✔ pgfoundry.org

✔ Desarrollo en caliente✔ commitfest.postgresql.org✔ git.postgresql.org

✔ La comunidad siempre ayuda✔ Archives.postgresql.org✔ #postgresql

Un elefante nunca olvida

Page 25: PostgreSQL: Un motor Impulsado por una comunidad

¿Preguntas?

Santiago Zarate@foursixnine

[email protected]://blog.santiago.zarate.net.ve