CNTI Postgresql Un Motor Impulsando Una Comunidad

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

Transcript of CNTI Postgresql Un Motor Impulsando Una Comunidad

Page 1: CNTI Postgresql Un Motor Impulsando Una Comunidad

Un motor impulsado por una comunidad.

Santiago Zarate@foursixnine0416- 9113678

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

Page 2: CNTI Postgresql Un Motor Impulsando 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 BSD✔ Excelente documentacion

Page 3: CNTI Postgresql Un Motor Impulsando 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:

Page 4: CNTI Postgresql Un Motor Impulsando Una Comunidad

Antes de comenzarSobre PostgreSQL: La gente

Page 5: CNTI Postgresql Un Motor Impulsando Una Comunidad

Antes de comenzarSobre PostgreSQL:

✔ Es utilizado por gente grande

Page 6: CNTI Postgresql Un Motor Impulsando Una Comunidad

Antes de comenzarSobre PostgreSQL:

✔ Empresas que Colaboran

Page 7: CNTI Postgresql Un Motor Impulsando Una Comunidad

Entrando en materiaFuncionalidades:

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

✔ Window Functions✔ 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)✔ Seguro.

Page 8: CNTI Postgresql Un Motor Impulsando 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;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;LANGUAGE plpythonu;

Page 9: CNTI Postgresql Un Motor Impulsando 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;LANGUAGE pllua;

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

Page 10: CNTI Postgresql Un Motor Impulsando 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: CNTI Postgresql Un Motor Impulsando Una Comunidad

Lenguajes Procedurales

Razones para nono utilizarlos

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

Page 12: CNTI Postgresql Un Motor Impulsando 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: CNTI Postgresql Un Motor Impulsando Una Comunidad

✔ 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”

Funcionalidades

Hot Stand By

Page 14: CNTI Postgresql Un Motor Impulsando 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.

Page 15: CNTI Postgresql Un Motor Impulsando 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

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

Page 16: CNTI Postgresql Un Motor Impulsando 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 17: CNTI Postgresql Un Motor Impulsando 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 18: CNTI Postgresql Un Motor Impulsando Una Comunidad

Funcionalidades

Funciones de Ventana – Window Functions

Page 19: CNTI Postgresql Un Motor Impulsando Una Comunidad

Funcionalidades

Funciones de Ventana – Window Functions

Page 20: CNTI Postgresql Un Motor Impulsando 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 21: CNTI Postgresql Un Motor Impulsando 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 22: CNTI Postgresql Un Motor Impulsando Una Comunidad

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

Herramientas

Facilitando el trabajo y ampliando las posibilidades

Page 23: CNTI Postgresql Un Motor Impulsando Una Comunidad

¿Preguntas?

Santiago Zarate@foursixnine

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