Re: [postgresql-it] Consiglio su separazione campi di una tabella

  • From: Giorgio Ponza <ponzagiorgio@xxxxxxxxx>
  • To: postgresql-it <postgresql-it@xxxxxxxxxxxxx>
  • Date: Wed, 02 Apr 2008 12:07:28 +0200

Ing. Claudio Rossi wrote:

Se ho capito in modo corretto, il tuo database non e' normalizzato.
Potresti scrivermi lo schema della tabella (o almeno un esempio
simile) e dire quali campi sono quelli che richiedono ulteriori insert
e quali rimangono uguali invece?

Molto volentieri, ecco lo schema della tabella a cui ho scritto sulla destra --> FISSO se il campo viene scritto solo all'inserimento del record e mai modificato, oppure --> UPDATE se invece viene aggiornato almeno una volta
CREATE TABLE positions
(
  pos_id          BIGINT DEFAULT nextval('seq_positions'), --> FISSO
  pos_serial      VARCHAR NOT NULL, --> FISSO
  pos_longitude   DOUBLE PRECISION NOT NULL, --> FISSO
  pos_latitude    DOUBLE PRECISION NOT NULL, --> FISSO
  pos_speed       SMALLINT NOT NULL DEFAULT 0, --> FISSO
  pos_date        TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, --> FISSO
  pos_type        INTEGER NOT NULL DEFAULT 1000, --> FISSO
  pos_altitude    INTEGER DEFAULT 0, --> FISSO
  pos_valid       BOOLEAN NOT NULL DEFAULT TRUE, --> FISSO
  pos_analog_in   BYTEA, --> FISSO
  pos_digital_in  BYTEA, --> FISSO
  pos_digital_out BYTEA, --> FISSO
  pos_distance    DOUBLE PRECISION NOT NULL DEFAULT 0, --> UPDATE
  elab_distance   BOOLEAN NOT NULL DEFAULT FALSE, --> UPDATE
  pos_address     VARCHAR, --> FISSO
  pos_housenumber VARCHAR, --> FISSO
  pos_zip         VARCHAR, --> FISSO
  pos_place       VARCHAR, --> FISSO
  elab_alarm      BOOLEAN NOT NULL DEFAULT FALSE, --> UPDATE
  tot_alarms      INTEGER NOT NULL DEFAULT 0, --> UPDATE
  pos_trip        VARCHAR DEFAULT NULL, --> UPDATE
  pos_calctype    INTEGER NOT NULL DEFAULT 0, --> UPDATE
  pos_direction   VARCHAR, --> UPDATE
  pos_timediff    BIGINT DEFAULT 0, --> UPDATE
  elab_timediff   BOOLEAN NOT NULL DEFAULT FALSE, --> UPDATE
  elab_counters   BOOLEAN NOT NULL DEFAULT FALSE --> UPDATE
) WITHOUT OIDS;

Sono in tutto 16 campi fissi e 10 aggiornabili. Quello che pensavo io era di spostare i 10 campi aggiornabili in una tabella separata (visto che contengono molti meno dati dei 16 fissi), in relazione 1-1.
Il ragionamento che facevo io era sul vacuum full, in quanto con questa soluzione la tabella con tante tuple segnate 'vacuumable' sarebbe piu' piccola (dal punto di vista dello spazio occupato) e teoricamente il tempo impiegato migliore.
Da questo ragionamento poi, volendo essere piu' teorici, si potrebbe fare un discorso su come comportarsi in questi casi, cioe' conviene separare sempre le tabelle in questo modo?
Se hai voglia, oltre magari a darmi un suggerimento per questo problema specifico, potresti condividere con me (e gli altri della lista) le tue idee su questo tipo di problemi (riconducibili magari anche alla normalizzazione).
Grazie ancora

Giorgio Ponza


Ciao a tutti,
volevo chiedervi un consiglio su un'idea che mi e' venuta.
Premetto che utilizzo PostgreSQL 8.2.5
Ho una tabella che mantiene le posizioni GPS di tante centraline che
girano in Italia. Questi punti vengono elaborati N volte (ad esempio una
volta vengono calcolate le distanze, altre volte i viaggi, le
statistiche etc). Queste elaborazioni sono separate e devono rimanere
separate.
Di questa tabella, 17 campi vengono scritti solo la prima volta
(all'atto dell'inserimento) e 10 invece vengono ripetutamente rielaborati.
Siccome i punti cominciano a diventare tanti (decine di migliaia di
punti vengono aggiunti ogni giorno), sto notando un rallentamento
durante il vacuum full che eseguo ogni notte.
Ho pensato che magari potrei separare la tabella in 2, dove in una metto
i campi 'fissi' e nell'altra i campi 'modificabili'. In questo modo
avrei lo svantaggio della JOIN se voglio tutti i dati, ma le tuple
segnate come 'vacuumabili' dovrebbero avere una dimensione ridotta, e
quindi il vacuum forse ne trarrebbe vantaggio.
Qualcuno di voi ha gia' avuto questo problema e magari ha trovato una
soluzione intelligente? Oppure secondo voi in questo modo complicherei
solo lo schema senza dare vantaggi al vacuum? (purtroppo non ho la
possibilita' di fare prove in produzione :D ).
Grazie a tutti

Giorgio Ponza
_______________________________________________
Postgresql-it mailing list
Postgresql-it@xxxxxxxxxxxxx
http://lists.psql.it/mailman/listinfo/postgresql-it



Other related posts: