Domanda

Ho una tabella che deve essere popolata ogni ora dai dati estratti da GreenPlum. Questa tabella viene memorizzata sul server GreenPlum.

Allora, ciò che voglio sapere è che quale metodo (script di Python, scheduler di Windows o qualsiasi cosa) sarà adatto ai miei dati (che immagino che possa essere enorme come 60 GB o più) dovrebbe essere utilizzato per la pianificazione della query (scritto in PostgreSQL) da eseguire ogni ora.

Qualcuno può allegare un codice di esempio per lo stesso?

È stato utile?

Soluzione

Volete eseguire un COPY parallelo di gamme dei dati fuori dal GreenPlum e in PostgreSQL. Assicurarsi che PostgreSQL sia impostato per il caricamento rapido dei dati. Se possibile, utilizzare una tabella UNLOGGED; altrimenti utilizzare almeno wal_level = 'minimal'.

Quanti lavoratori paralleli dipendono dal sottosistema I / O del server di PostgreSQL più di qualsiasi altra cosa. Testare e vedere.

Consiglierei di utilizzare Python con PsyCopG2 e la funzione del cursore del copy_expert. Vedi i documenti . Utilizzare Multiprocessing con un tubo per condividere un oggetto simile a un file tra un lettore e un lavoratore scrittore, con il lettore connesso a GreenPlum e lo scrittore a PostgreSQL.

Così efficacemente ogni lavoratore fa qualcosa un po 'come il seguente shell pseudo-code:

psql -h greenplum-box \
     -c "COPY (SELECT * FROM mytable WHERE id BETWEEN 1 AND 10000) TO stdin" \
  | \
psql -h postgres-box \
     -c "COPY myttable FROM stdin";
.

(ma si collega i due utilizzando Pyscopg2, copy_export, Multiprocessing e un tubo).

Fai tutto il normale lavoro di caricamento rapido come la creazione di indici in seguito. Vedi Come accelerare le prestazioni di inserimento in PostgreSQL .

Se si dispone dello spazio su disco, creare una tabella come dataload_temp, popolarlo, quindi in una transazione lascia cadere la vecchia e rinomina la nuova al nome del vecchio. In questo modo c'è un'interruzione minima.

In alternativa, dai un'occhiata a pg_bulkload per il caricamento dei dati off-line (ma non streaming).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top