Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PostgreSQL: Un motor Impulsado por una comunidad

2,443 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

PostgreSQL: Un motor Impulsado por una comunidad

  1. 1. Un motor impulsado por una comunidad.Santiago Zarate@foursixnine0416- 9113678 santiago·@zarate.net.vehttp://blog.santiago.zarate.net.ve
  2. 2. Antes de comenzar Sobre 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
  3. 3. Antes de comenzar Sobre PostgreSQL: ¿Quienes estan detras? ✔ 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
  4. 4. Antes de comenzar Sobre PostgreSQL: La gente
  5. 5. Antes de comenzar Sobre PostgreSQL: Quienes lo Utilizan. ✔ Es utilizado por gente grande
  6. 6. Antes de comenzar Sobre PostgreSQL: ¿Quienes Colaboran? ✔ Empresas que Colaboran
  7. 7. Entrando en materia Funcionalidades: ✔ 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: ✔ PLs (Lenguajes Procedurales) ✔ Directorio contrib/ ✔ Soportado por: ✔ Java (JDBC), ODBC, Perl, Python, Ruby, C, C++, PHP, Lisp, Scheme, y Qt (Por nombrar algunos) ✔ Es Seguro
  8. 8. Lenguajes Procedurales 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}; ✔ pl/pgsql my $nrows = $rv->{processed}; ✔ pl/perl foreach my $rn (0 .. $nrows - 1) { my $row = $rv->{rows}[$rn]; ✔ sql $row->{i} += 200 if defined($row->{i}); $row->{v} =~ tr/A-Za-z/a-zA-Z/ if (defined($row->{v})); ✔ pl/python return_next($row); } ✔ pl/tcl 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;
  9. 9. Lenguajes Procedurales No Nativos ✔ pl/lua ✔ pl/php CREATE FUNCTION counter() RETURNS int AS $$ while true do ✔ pl/r upvalue = upvalue + 1 ✔ pl/javascript coroutine.yield(upvalue) end ✔ pl/lolcode end do ✔ pl/scheme upvalue = 0 -- counter ✔ pl/java counter = coroutine.wrap(counter) $$ ✔ pl/* LANGUAGE pllua; CREATE FUNCTION js_gen_series(mn FLOAT8, mx FLOAT8) RETURNS SETOF FLOAT8 AS $$ while (mn <= mx) { yield mn; mn += 1; } $$;LANGUAGE pljs
  10. 10. 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
  11. 11. Lenguajes Procedurales Razones para no utilizarlos ✔ Añade dependencias extra ✔ Agrega otro paso al Mantenimiento ✔ Comunidades pequeñas * ✔ Posible uso malintencionado ✔ Y sin embargo...
  12. 12. 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
  13. 13. 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”
  14. 14. 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 )
  15. 15. 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)
  16. 16. Funcionalidades Funciones de Ventana – Window FunctionsSELECT n.customer_id, n.order_id, n.order_total, COALESCE(SUM(o.order_total),0) As past_order_totalFROM 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_totalORDER BY n.customer_id, n.order_datetime, n.order_id;
  17. 17. Funcionalidades Funciones de Ventana – Window FunctionsSELECT 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_totalFROM orders AS nORDER BY n.customer_id, n.order_datetime, n.order_id;
  18. 18. Funcionalidades Funciones de Ventana – Window Functions
  19. 19. Funcionalidades Funciones de Ventana – Window Functions
  20. 20. 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
  21. 21. 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
  22. 22. Herramientas Facilitando el trabajo y ampliando las posibilidades ✔ Interfaces Graficas de Usuairo: Acceso y Diseño ✔ PgadminIII ✔ PhpPgAdmin ✔ Druid III * ✔ Tora ✔ Psql ✔ PgAccess ✔ SQrrieL SQL ✔ split_postgres_dump
  23. 23. Un elefante nunca olvida ✔ 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
  24. 24. ¿Preguntas?Santiago Zarate@foursixnine santiago@zarate.net.vehttp://blog.santiago.zarate.net.ve

×