Domanda

Una volta al giorno ho bisogno di aggiornare una tabella MySQL con un nuovo file scaricati dalla rete usando FTP e poi mysqlimport. Tuttavia, voglio che il mio sito web per mantenere in esecuzione senza problemi durante l'operazione mysqlimport, che prende un po 'di tempo (si tratta di un grande tavolo). Quale sarebbe un buon modo per assicurare che gli utenti non aspettano l'importazione per finire? Sto pensando di importare in una tabella temporanea e poi rinominandolo. È un buon piano?

È stato utile?

Soluzione

Un fatto poco noto è che è possibile concatenare più di una dichiarazione di ridenominazione in MySQL e sarà eseguire tutte il nome cambia in modo atomico.

create table newtable like oldtable;
insert into newtable .......
rename table oldtable to deleteme, newtable to oldtable;
drop table deleteme;

La tabella rename bloccherà i lettori (in realtà si bloccherà qualsiasi risoluzione del nome), ma dovrebbe essere un'operazione molto veloce.

Altri suggerimenti

Se si tratta di un caso di un aggiornamento incrementale, si potrebbe semplicemente strozzare l'inserimento di nuovi dati tramite cron / scheduling.

Carica XYZ registra ogni minuto, vedere se l'aggiornamento precedente è terminata, fare un file di lock, inserto in ritardo, risciacquare e ripetere.

Se si vuole ottenere reali intelligenti su di esso, fare controllare lo script di aggiornamento il carico del server in fase di esecuzione e regolare il numero di importazioni di conseguenza.

Questo farà sì che i dati freschi ad apparire in lotti, ma vi permetterà di mantenere il sito in esecuzione mentre è in fase di aggiornamento.

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