Un breve riepilogo di quello che è successo. Sto lavorando con 71 milioni di record (non molto rispetto ai miliardi di record elaborati da altri). Su un diverso thread, qualcuno ha suggerito che l'attuale configurazione del mio cluster non è adatta alle mie esigenze. La mia struttura della tabella è:Tabella con 80 milioni di record e l'aggiunta di un indice richiede più di 18 ore (o per sempre)! Ora cosa?
CREATE TABLE `IPAddresses` (
`id` int(11) unsigned NOT NULL auto_increment,
`ipaddress` bigint(20) unsigned default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
E ho aggiunto i 71 milioni di dischi e poi ha fatto un:
ALTER TABLE IPAddresses ADD INDEX(ipaddress);
E 'stato 14 ore e l'operazione non è ancora stata completata. Su Google, ho scoperto che esiste un approccio ben noto per risolvere questo problema: partizionamento. Capisco che ho bisogno di partizionare il mio tavolo ora basato sull'indirizzo ip, ma posso farlo senza ricreare l'intera tabella? Voglio dire, attraverso una dichiarazione ALTER? Se sì, c'era un requisito che diceva che la colonna da partizionare doveva essere una chiave primaria. Userò l'id di questo indirizzo IP nella costruzione di una tabella diversa in modo che ipaddress non sia la mia chiave primaria. Come partizionare la tabella in base a questo scenario?
I documenti di partizionamento di MySQL: http://dev.mysql.com/doc/refman/5.1/en/partitioning.html –
il campo ID non è necessario. –
@Seun: In tal caso, se voglio costruire una tabella che contiene per esempio, 'URI | ipaddress' e si desidera utilizzare l'id associato al IP address, Come sarò in grado di farlo? Stavo cercando di normalizzare una tabella diversa che richiedeva la creazione di questo tavolo in primo luogo. Eventuali suggerimenti? – Legend