Re: Programación en C

From: Jorge Niedbalski <niedbalski(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: Teofilo Oviedo <teus79(at)active(dot)com(dot)py>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Programación en C
Date: 2007-07-19 00:44:45
Message-ID: 469EB3FD.9000504@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro Herrera wrote:
> Jorge Niedbalski escribió:
>> Teofilo Oviedo wrote:
>
>>> Tengo un sistema hecho en C que debe quedar arriba durante las 24 hs.
>>> Y cada tres segundos entra en un bucle hecho en un while donde se
>>> consulta por medio de un SELECT si hay registros nuevos que procesar.
>>> Una vez que se haya verificado o procesado el/los registros se vuelve al
>>> bucle.
>> Primero piensa en migrar a una arquitectura de multihilos para controlar
>> los procesos concurrentes sobretodo si hablas de alto rendimiento, en
>> relacion a los sockets te recomendaria pensar en una solucion de
>> multiplexacion de los fd , puedes ver una libreria que lo hace muy bien
>> para el caso del servidor aqui
>> (http://nets.cl/public/sources/mplx2_02_2007.tar.gz) que usa eventos con
>> poll y select, te puede ayudar...
>
> Hmm, eso no necesariamente es buena idea con Postgres, porque no se
> puede mezclar una conexion con varios "lectores". Solo podrias
> compartir una conexion hacia Postgres cuando este "ociosa", es decir,
> ningun otro thread debe estar enviando una consulta o esperando un
> resultado.
>
> Lo mas sano es que cada proceso (o thread) mantenga su conexion por
> separado. De lo contrario es super dificil sincronizarlos
> correctamente; y cuando lo logras, el rendimiento es malo porque tienes
> que serializar el uso de la conexion.

Eso es cierto..

>
> Ahora si tuvieras MUCHOS (llamemoslo N) threads quizas valdria la pena
> tener VARIOS (llamemoslo M) conexiones, con M << N, y compartir las
> conexiones entre los procesos (siempre y cuando te asegures de dejar la
> conexion en un estado "limpio" despues de cada uso, es decir fuera de
> toda transaccion, etc). Pero creo que es dificil de hacer y
> probablemente lleno de bugs.

En realidad mas que dificil de hacer , pierde sentido para M << N ya que
solo validar las conexiones "limpias" implica mucho trabajo y bugs
probablemente que si...

>Si realmente llegaras a necesitar eso,
> lo que yo haria seria tratar las conexiones normalmente en la aplicacion
> (es decir una por thread) y usar un pooler intermedio, como PgPool o el

Interesante . Sabia que tenia que existir un pooler intermedio :P
Desconocia la existencia de PgPool (Me estoy adentrando en Postgres)..

> pooler de Skype (cuyo nombre se me escapa).
>

Saludos Alvaro!.

--
Jorge Niedbalski R.
- ElectroLinux I+I+D-
BSD Chile.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message FRANZ RICHARD MARIN VASQUEZ 2007-07-19 05:24:26 Variables Globales
Previous Message Alvaro Herrera 2007-07-19 00:32:18 Re: Programación en C