postgresql: un motor impulsado por una comunidad

Post on 04-Jul-2015

1.796 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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

Un motor impulsado por una comunidad.

Santiago Zarate@foursixnine0416- 9113678

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

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

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

Antes de comenzarSobre PostgreSQL: La gente

Antes de comenzarSobre PostgreSQL: Quienes lo Utilizan.

✔ Es utilizado por gente grande

Antes de comenzarSobre PostgreSQL: ¿Quienes Colaboran?

✔ Empresas que Colaboran

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

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;

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

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

Lenguajes Procedurales

Razones para nono utilizarlos

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

✔ Y sin embargo...

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

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”

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 )

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)

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;

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

Funcionalidades

Funciones de Ventana – Window Functions

Funcionalidades

Funciones de Ventana – Window Functions

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

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

✔ 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

✔ 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

¿Preguntas?

Santiago Zarate@foursixnine

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

top related