Re: Ayuda con inquietud

From: Javier Aquino <JAquino(at)LexusEditores(dot)com>
To: Jorge Toro <jolthgs(at)gmail(dot)com>
Cc: Foro Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda con inquietud
Date: 2012-07-10 01:48:50
Message-ID: 1341884930.8628.79.camel@javier-ntb
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

OK,

No había caído en cuenta de ello.

Entonces te quedaría 2 opciones:

1. Crear un campo position_id en tu tabla "maestra" gps, este campo se
actualizaría cada vez que realices un insert nuevo a tu tabla positions.

Pros:
- Actualización muy rápida ya que solo actualizas un campo int.

Contras:
- La tabla maestra no debería tener un volumen alto de actualizaciones
- Solo tienes el id de positions, lo cual te obliga a consultar esta
tabla para ver los datos ( posicion, velocidad, altura, etc.)

2. crear una tabla nueva exactamente igual a positions llamado
last_positions, pero con dos cambios ( id integer y no serial, gps_id
primary key) y este se actualizaría cada vez que ingrese un dato nuevo a
tu tabla positions.

Pros:
- Tu tabla maestra no sufre actualizaciones masivas
- Tienes los datos completos de positions.

Contras:
- La actualización es un poco mas lenta (milisegundos) que la opción
anterior ya que graba todo el registro y no solo un campo.

Para el caso uno (1) ya te dieron un script, para el caso dos (2) puedes
hacer esto:

CREATE TABLE last_positions
(
id integer NOT NULL,
gps_id integer NOT NULL,
"position" point,
velocidad real,
altura real,
fecha timestamp(0) with time zone,
grados real,
satelites integer,
CONSTRAINT last_positions_pkey PRIMARY KEY (gps_id )
);

CREATE OR REPLACE FUNCTION positions_bi_fn()
RETURNS trigger AS
$BODY$
BEGIN
update last_positions
set (id, gps_id, position, velocidad, altura, fecha, grados,
satelites) = ( new.id, gps_id, new.position, new.velocidad, new.altura,
new.fecha, new.grados, new.satelites)
where gps_id = new.gps_id;

if not found then
insert into last_positions
values ( new.* );
end if;

return new;
END;
$BODY$
;

CREATE TRIGGER positions_bi
BEFORE INSERT
ON positionsier.
FOR EACH ROW
EXECUTE PROCEDURE positions_bi_fn();

Saludos y nuevamente éxitos en tu proyecto, luego nos cuentas como te
fue.

Javier.

On Mon, 2012-07-09 at 19:14 -0500, Jorge Toro wrote:

> Hola Javier, gracias por tu aporte. Pero como menciona Alejandro el
> problema radica en que esta tabla contendrá muchos
> registros rápidamente y en un futuro no muy lejano tendrá millones de
> registros.
>
>
>
> Gracias a todos nuevamente,
>
> Jorge Alonso Toro
> Ing. Teleinformático.
>
> http://jolthgs.wordpress.com/
> www.devmicrosystem.com
> --------------------------------------------------------------
> Powered By Debian.
> Developer Bullix GNU/Linux.
> --------------------------------------------------------------
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
>
> iD8DBQBIWWH6q7mzdgTzI5ARAkX5AJ9TR6hL2ocLMOUDRfhts8DlVl+jpwCeNw5x
> p4+4FNUHPDUx1lU9F8WSKCA=
> =zRhQ
> -----END PGP SIGNATURE-----
> Este correo esta protegido bajo los términos de la Licencia
> Atribución-Compartir Obras Derivadas Igual a 2.5 Colombia de Creative
> Commons. Observé la licencia visitando este sitio
> http://creativecommons.org/licenses/by-sa/2.5/co/.
>
>
>
> El 9 de julio de 2012 19:06, Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
> escribió:
>
> Creo que el tema aquí es por la velocidad de acceso a los
> registros, ya que en esa tabla pueden haber 100 o 200 millones
> de registros por ser un sistema de GPS con 1000 GPS's.
>
>
>
>
> ______________________________________________________
> De: Javier Aquino <JAquino(at)LexusEditores(dot)com>
> Para: Jorge Toro <jolthgs(at)gmail(dot)com>
> CC: Foro Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
> Enviado: Lunes 9 de julio de 2012 18:57
>
>
> Asunto: Re: [pgsql-es-ayuda] Ayuda con inquietud
>
>
>
>
> Estimado Jorge,
>
> Y no te ayudaría un sentencia select comun y corriente
> com esta ???
>
> SELECT *
> FROM positions p1
> JOIN ( select gps_id, max(date) date from
> positions group by gps_id) p2
> USING ( gps_id, date )
> ;
>
>
> Esta consulta te devolvería el ultimo registro de cada
> gps_id.
>
> Espero te sirva.
>
> Saludos y éxitos.
>
> Javier.
>
>
> On Mon, 2012-07-09 at 07:56 -0500, Jorge Toro wrote:
>
> > Hola lista hoy acudo a ustedes con la siguiente
> > inquietud.
> >
> >
> > Tengo un programa servidor que captura los datos
> > enviados por unos dispositivos "gps" y los almacena
> > en una una tabla "positions". La tabla positions
> > tiene la siguiente estructura:
> >
> >
> > positions
> > --------------
> > id serial PK
> > gps_id integer FK ( de gps.id)
> > posicion point
> > velocidad real
> > altura real
> > date timestamp
> > grados real
> > satelites integer
> >
> >
> >
> >
> > Ya que los dispositivos GPS envían información de su
> > ubicación cada minuto, me es de gran importancia
> > almacenar de alguna forma el último dato de cada GPS
> > que se encuentra en la tabla "position", para poder
> > mostrar la última información enviada por cada uno
> > de los GPS en el momento que se ingrese a una página
> > web.
> >
> >
> > Mi duda sinceramente es que no se cómo realizar esta
> > tarea de una forma eficiente.
> >
> >
> > He pensado en hacer una vista llamada
> > "position_gps_actual" que me almacene el último dato
> > de cada GPS dentro de la tabla "position" en el
> > momento que se le ingrese un nuevo dato a esta
> > tabla. Pero no se cómo puedo hacerlo, ya que mis
> > comocimientos en PostgreSQL son básicos y creo que
> > requiero de PL/SQL (En este momento le he dado
> > solución realizando programación en el servidor para
> > que cuando un GPS envíe información además de
> > alamacenarla en la tabla "position" también me la
> > almacene en una tabla que contenga cada uno de los
> > GPS y con un UPDATE me ponga esa data en el
> > respectivo GPS.).
> >
> >
> > Me ayudaría mucho si me pueden ayudar aclarándome el
> > camino que debo tomar y que debo aprender (en
> > PostgreSQL) para lograr mi objetivo. Ya tengo poco
> > tiempo para entregar este proyecto y este es un tema
> > que quiero solucionar de la mejor manera.
> >
> >
> >
> >
> > A todos muchas gracias y atento a sus comentarios.
> >
> >
> > Jorge Alonso Toro
> > Ing. Teleinformático.
> >
> > http://jolthgs.wordpress.com/
> > www.devmicrosystem.com
> > --------------------------------------------------------------
> > Powered By Debian.
> > Developer Bullix GNU/Linux.
> > --------------------------------------------------------------
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1.4.6 (GNU/Linux)
> >
> > iD8DBQBIWWH6q7mzdgTzI5ARAkX5AJ9TR6hL2ocLMOUDRfhts8DlVl+jpwCeNw5x
> > p4+4FNUHPDUx1lU9F8WSKCA=
> > =zRhQ
> > -----END PGP SIGNATURE-----
> > Este correo esta protegido bajo los términos de la
> > Licencia Atribución-Compartir Obras Derivadas Igual
> > a 2.5 Colombia de Creative Commons. Observé la
> > licencia visitando este sitio
> > http://creativecommons.org/licenses/by-sa/2.5/co/.
> >
>
>
>
>
>
>
>
>
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2012-07-10 02:59:53 Re: Fwd: instalacion
Previous Message Jorge Toro 2012-07-10 00:14:44 Re: Ayuda con inquietud