El mar., 13 oct. 2020 a las 9:21, Diego (<mrstephenam...@gmail.com>) escribió:
>
> Hola, aca Diego con la idea loca de siempre.
>
> Che, supongo que particionaste por triggers y a su vez volviste a usar un 2do 
> trigger para este update... segun mi experiencia, eso se hacia a principio de 
> los 2000 ;P
>
> Que haria yo, si fuera posible, particionaria nativo, por hash y 
> subparticionaria por mes (o semana, o dia dependiendo de las distancias 
> promedio entre insert e insert), recorda que en nativo pordes hacer particion 
> de particion. De esta forma, el update no pasa por el mismo lock que el 
> insert, no se si me explico.
>
> y posta, en pg12, vas a volar con las mejoras en particionamiento, en 13 
> mucho mas, fijate de considerar actualizar de version.
>
> en fin, chiflame si necesitas ayuda.
>
> Abraxo!
>
>
> On 2020-10-13 09:58, Edwin De La Cruz wrote:
>
>
>
>
> El mar., 13 de octubre de 2020 07:46, Alvaro Herrera 
> <alvhe...@alvh.no-ip.org> escribió:
>>
>> Edwin De La Cruz escribió:
>>
>> > Voy a explicar de forma ańaloga como funciona el ingreso de datos,
>> > pensemos en un sistema de alarma:
>> > 1) Cuando se abre una puerta se genera un evento de "alarma".
>> > 2) Ahora cuando se cierra la puerta se genera un evento de
>> > "Restauración de alarma", lo cual cancela ("ACTUALIZA EL ESTADO")  del
>> > evento anterior.
>>
>> Hm, yo apoyo lo que dice Jaime, a saber, que el diseño no es el adecuado.
>> Sugiero pasar un par de horas pensando en un diseño que te permita
>> implementar tus necesidades sin requerir estas operaciones de doble
>> efecto.
>>
>> Hay modificaciones al motor Postgres que todavía están pendientes para
>> que tablas particionadas tengan rendimiento parecido a tablas normales.
>> Algunas están en pg11, otras en pg12 y 13, pero todavía hay propuestas
>> en pg14.  Lo que trato de argumentar es que no esperes que el
>> rendimiento con tablas particionadas sea equivalente, porque mientras
>> esas optimizaciones no estén, no lo es.
>>
>>
>
> Gracias, por responder, pues la verdad la aplicación tiene algunos años 
> funcionando así pero el nivel de transacciones era muy bajo. Ahora que la 
> aplicación creció en transacciones y usuarios me topé con este inconveniente. 
> El cuello de botella son los UPDATE en cada INSERT.
>
> Luego de desvelarme un par de noches y meditarlo con mi almohada decidí 
> desactivar el Trigger, perderé algunas características actuales de mi 
> aplicación en favor de una mayor velocidad para recibir registros en las 
> tablas.
>
> Como les comenté la aplicación recibe "alarmas" y por la naturaleza de las 
> mismas deben procesarse a la mayor velocidad posible. Esta base es parte de 
> una PWA para seguridad comunitaria que la tengo en GitHub.
>
> Gracias a todos por su ayuda.
>
>
>
>
>
>

Gracias Diego. Pues inicialmente hace un par de años particionaba con
tablas heredadas y triggers. Ahora con pg10 uso particionado nativo.
Para insertar datos no uso trigger, sino una función, que es el punto
de entrada, que primero verifica que la partición donde se va a
insertar el datos exista, caso contrario crea la partición e inserta
el registro. Tengo particionado por idcliente y esta tabla a su vez
está dividida por meses.

eventos.data -> eventos.data_00001 -> eventos.data_00001_20200101

->eventos.data_00001_20200102

->eventos.data_00001_20200103, etc, etc

De esta forma, si tengo un nuevo cliente o cambio de mes, las tablas
se crean dinámicamente, esto me funciona sin problemas, ahora con el
particionado nativo me ha facilitado mucho el trabajo.

Estoy probando en Heroku con pg12 y me va muy bien, solo que en Heroku
no puedo subir tantos registros. El desempeño se ve afectado a partir
de unos cuantos cientos de miles de registros cuando pruebo en mi
máquina.

Como me aconsejaron, estoy repensando la lógica de la aplicación.







Mis proyectos de software libre en:
Github - edwinspire


Reply via email to