postgresql: un motor impulsado por una comunidad
Post on 04-Jul-2015
1.796 Views
Preview:
DESCRIPTION
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