Goedendag Tweakers,
Ik ben de laatste tijd bezig geweest met een script om in te kunnen loggen op NNTP-servers (ook wel bekend als Usenet, nieuwsgroepen dus) en alle artikelen binnen 1 nieuwsgroep (in mijn geval a.b.mp3) in een database te zetten (subject + messageID + date + size).
Het zijn in totaal 13 miljoen records, in een MyISAM database. Op dit moment zijn het al bijna 5 miljoen records, maar het script is nog bezig.
Da's allemaal erg leuk, maar ik realiseer me net dat usenet geen losse bestandjes zijn, maar posts. Elk bestandje kan bestaan uit veel posts. 1 MP3 bestand van 5 MB kan al snel opgesplitst worden in 50 posts, die allemaal bij elkaar gezocht moeten worden voor ze gedownload kunnen worden.
Ik had nu 2 vragen:
1. Op een database met 13 miljoen records, is MyISAM wel de beste keuze?
2. Hoe kan ik het beste een query maken die 1 bestand zoekt? Ik kijk nu even naar de top2000 en stel dat ik "Eagles - Hotel California" zou willen. Ik gebruik nu LIKE "%Eagles%Hotel%California%", maar zijn er betere manieren om dit te doen? Dit duurt namelijk eindeloos lang. 1 minuut is toch wel mijn maximum voor een query als deze.
Overige informatie
http://www.tvdw.eu/data.txt is een output-voorbeeldje van onderstaande query. (Die overigens 30 seconden duurde, maar dat was op 1.2 miljoen records en niet de 5 miljoen die ik inmiddels heb)
SELECT * FROM `index` WHERE index_subject LIKE '%deadmau5%';
Iets later op 4.1 miljoen rows nog eens gebenchmarked :
mysql> SELECT * FROM `index` WHERE index_subject LIKE '%Hotel%California%' LIMIT 30;
20 rows in set (6 min 39.32 sec)
Tom
Ik ben de laatste tijd bezig geweest met een script om in te kunnen loggen op NNTP-servers (ook wel bekend als Usenet, nieuwsgroepen dus) en alle artikelen binnen 1 nieuwsgroep (in mijn geval a.b.mp3) in een database te zetten (subject + messageID + date + size).
Het zijn in totaal 13 miljoen records, in een MyISAM database. Op dit moment zijn het al bijna 5 miljoen records, maar het script is nog bezig.
Da's allemaal erg leuk, maar ik realiseer me net dat usenet geen losse bestandjes zijn, maar posts. Elk bestandje kan bestaan uit veel posts. 1 MP3 bestand van 5 MB kan al snel opgesplitst worden in 50 posts, die allemaal bij elkaar gezocht moeten worden voor ze gedownload kunnen worden.
Ik had nu 2 vragen:
1. Op een database met 13 miljoen records, is MyISAM wel de beste keuze?
2. Hoe kan ik het beste een query maken die 1 bestand zoekt? Ik kijk nu even naar de top2000 en stel dat ik "Eagles - Hotel California" zou willen. Ik gebruik nu LIKE "%Eagles%Hotel%California%", maar zijn er betere manieren om dit te doen? Dit duurt namelijk eindeloos lang. 1 minuut is toch wel mijn maximum voor een query als deze.
Overige informatie
http://www.tvdw.eu/data.txt is een output-voorbeeldje van onderstaande query. (Die overigens 30 seconden duurde, maar dat was op 1.2 miljoen records en niet de 5 miljoen die ik inmiddels heb)
SELECT * FROM `index` WHERE index_subject LIKE '%deadmau5%';
Iets later op 4.1 miljoen rows nog eens gebenchmarked :
mysql> SELECT * FROM `index` WHERE index_subject LIKE '%Hotel%California%' LIMIT 30;
20 rows in set (6 min 39.32 sec)
code:
1
2
3
4
5
6
7
8
9
10
11
12
| CREATE TABLE `index` ( `index_id` int(11) NOT NULL, `index_group` varchar(30) NOT NULL, `index_subject` varchar(200) NOT NULL, `index_date` varchar(35) NOT NULL, `index_bytes` int(11) NOT NULL, `index_xref` blob NOT NULL, `index_messageID` varchar(100) NOT NULL, PRIMARY KEY (`index_id`), UNIQUE KEY `index_messageID` (`index_messageID`), KEY `index_subject` (`index_subject`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
Tom