il succoReindicizzazione enorme database (la Wikipedia in inglese) in modo efficiente
Prima di eseguire una massiccia 40+ GB importazione della Wikipedia inglese, ho dovuto rimuovere temporaneamente gli indici e campi di incremento automatico da tre tavoli ('page', 'revision' e 'text') per gestire il carico. Ora finalmente ho importato con successo la Wikipedia in inglese sul mio computer locale e ho creato un mirror locale (API MediaWiki). Sìì!
Tuttavia, ora devo ricreare gli indici e i campi di auto-incremento in meno di un decennio. Fortunatamente, (1) ho preso molte schermate delle tabelle rilevanti in phpmyadmin prima di rimuovere gli indici e i campi; (2) Posso spiegare con estrema precisione i passi che ho compiuto prima dell'importazione; e (3) questo non dovrebbe essere troppo difficile per chiunque parli fluentemente con MySQL. Sfortunatamente, non ho alcuna esperienza in MySQL, quindi le spiegazioni di "piccoli passi" sarebbero estremamente utili.
APPUNTO quello che ho fatto (PREPARAZIONE per l'importazione):
passaggi 1, 2, 3: Questa immagine descrive la tabella pagina prima che ho modificato il campo page_id facendo clic su 'Change' e deselezionare 'Auto-Increment' (in preparazione per l'importazione). Ho eseguito esattamente le stesse modifiche per il campo rev_id nella tabella revisione e old_id nella tabella testo ma omesso lo schermo-colpi per evitare ridondanza.
Fase 4: Questa immagine descrive gli indici per la tabella pagina prima ho lasciato cadere tutti loro.
Fase 5: Questa immagine descrive gli indici per la tabella revisione prima ho lasciato cadere tutti loro.
Fase 6: Questa immagine descrive gli indici per la tabella testo prima ho lasciato cadere tutti loro.
COSA ho bisogno ora (il ripristino dopo l'importazione):
Ho solo bisogno di ripristinare gli indici originali e campi di incremento automatico senza aspettare un centinaio di anni.
set-up dettagli: PHP 5.3.8 (apache2handler), MySQL 5.5.16 (InnoDB), Apache 2.2.21, Ubuntu 12.04 LTS, MediaWiki 1.19.0 (wiki privato)
+1 per una domanda ben scritta, ma temo che con set di dati di queste dimensioni, la creazione di indici richiederà un po 'di tempo, indipendentemente da come lo si fa. Se si trattava di MyISAM, avresti potuto evitare di eliminare gli indici prima di importarli: nelle tabelle MyISAM, puoi semplicemente disabilitarli e riattivarli dopo aver completato l'importazione dei dati, in tal caso MySQL riparerà automaticamente l'indice ordinando. Ma anche allora, l'ordinamento di 40 GB di dati richiederà un po 'di tempo anche su un sistema veloce. E stai usando InnoDB, in cui questa non è una possibilità AFAIK. – Daan
Non credo che disabilitare e abilitare sia più veloce della semplice creazione di un nuovo indice. Si parte da zero, si ordinano i dati e si scrive l'indice. – usr
Ricorda che sono un novizio MySQL completo. So cosa ho fatto, ma non ho idea di come ordinare, reindicizzare, ecc. Quindi sarebbe molto utile se hai spiegato con il codice. Se si rivela che disabilitare e abilitare l'utilizzo di MyISAM ha reso la reindicizzazione drasticamente più veloce, ho sempre potuto ricostruire tutto da zero - l'ho fatto così tante volte, potevo facilmente farlo di nuovo in circa 5 ore. La chiave è che non conosco quasi nulla di MySQL, quindi per favore sii specifico e fornisci esempi di codice se possibile. –