Toon posts:

[mysql] database erg langzaam..

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Het zal wel aan mij liggen, maar het loopt hier allemaal verschrikkelijk langzaam.

Ik ben bezig om een html zoekmachine te maken.
De website bestaat deels uit html bestanden en files in een db. Het gaat om zo'n 1500 html bestanden. De zoek mogelijkheid in een db is al gemaakt, nu ben ik bezig om ook voor de html bestanden een zoek mogelijkheid te maken.

Nou heb ik al wat in elkaar zitten, maar dit loopt een beetje langzaam. Ik heb het getest op zo'n 150 HTML bestanden.
Na de computer zo'n 15 minuten te laten prutellen, heb ik de actie gestopt. Hij was nog niet klaar. Ok, kan ik nog inkomen. Maar ik ben nou al 3 kwartier verder en de comp is nog steeds bezig met data in de db te gooien?

Het gaat uiteraard wel om veel data (de keywords staan nu op 7600 en de urls op 56), maar dit had ik toch wel sneller verwacht.

Is dit normaal, of ligt het aan slecht code?

Verwijderd

wat voorn machine draai je op?
ligt het aan de code?????? hoe kunnen wij dat raden? :)
indices goed gezet?
db model?

Verwijderd

Topicstarter
de db is nou nog steeds bezig en zit inmiddels op 8163 keywords en 60 url's :?

  • Grum
  • Registratie: Juni 2001
  • Niet online
sorry me glazen bol heeft momenteel een servicebeurt in de garage :P

en me harry potter toverstokje is gebroken :'(

Verwijderd

Topicstarter
niet lachen maar ik draai op win98.

Waarom ik dit allemaal vreemd vind, de code wordt allang niet meer uitgevoerd, maar de gegevens komen nog steeds de db in?

Verder is het gewoon:
apache(1.3.19)/mysql(3.23.34 )/php(4.04)

Ik wil ook wel code plaatsen, maar als jullie gelijk al zeggen dat het aan mysql ligt ofzo dan scheelt het weer een lap code ;)

Verwijderd

Op woensdag 06 maart 2002 11:41 schreef mvkooten het volgende:
niet lachen maar ik draai op win98.
processor, geheugen?

Verwijderd

Op woensdag 06 maart 2002 11:41 schreef mvkooten het volgende:
niet lachen maar ik draai op win98.

Waarom ik dit allemaal vreemd vind, de code wordt allang niet meer uitgevoerd, maar de gegevens komen nog steeds de db in?

Verder is het gewoon:
apache(1.3.19)/mysql(3.23.34 )/php(4.04)

Ik wil ook wel code plaatsen, maar als jullie gelijk al zeggen dat het aan mysql ligt ofzo dan scheelt het weer een lap code ;)
Ligt vml aan WIN98, MYsql onder linux zal vml op dezelfde compu een stuk beter lopen.. idem voor apache gok ik.

Verwijderd

Topicstarter
Uhmm.. ff kijken, t'is niet mijn bak.

De tussenstand:
8414 keywords.
64 url's.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 06 maart 2002 11:41 schreef mvkooten het volgende:
niet lachen maar ik draai op win98.

Waarom ik dit allemaal vreemd vind, de code wordt allang niet meer uitgevoerd, maar de gegevens komen nog steeds de db in?

Verder is het gewoon:
apache(1.3.19)/mysql(3.23.34 )/php(4.04)
Je hebt gelijk dat is niet om te lachen... das om te huilen... :'(

Maar dat is een andere discussie....

Programmer - an organism that turns coffee into software.


  • Grum
  • Registratie: Juni 2001
  • Niet online
is jouw toverstokje ook stuk woeitje ? :( :+

Wat doe je precies ? je leest de files en parsed ze ?

Watvoor db model heb je?

Verwijderd

Topicstarter
het is idg 128 mb geheugen en waar kan ik de cpu vinden zonder monitor prog en mijn syteem te herstarten?

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 09-09 17:22
Op woensdag 06 maart 2002 11:47 schreef mvkooten het volgende:
het is idg 128 mb geheugen en waar kan ik de cpu vinden zonder monitor prog en mijn syteem te herstarten?
De CPU zal waarschijnlijk in de computer zitten..Als die er niet in zit, dan heb je een probleem ;)

Verwijderd

Op woensdag 06 maart 2002 11:50 schreef PhoneTechnician het volgende:

[..]

De CPU zal waarschijnlijk in de computer zitten..Als die er niet in zit, dan heb je een probleem ;)
verklaard meteen waarom dat ding zo traag is ;)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Wat gebruik je voor het parsen?

Who is John Galt?


Verwijderd

Topicstarter
Mijn db model:

tabel keywords_list,
key_id (int 10)
page_id (text)
woord (varchar 255)

Tabel page_data,
page_id (int 10)
url (varchar 255)
title (varchar 60)
desc2 (text)
filesize (int 10)
date (int 12)

moet ik ook mijn code plaatsen?

En het zal op unix bets beter gaan, geloof ik graag :)
maar hij is nu, na bijna 1,5 uur nog steeds bezig en ik geloof niet dat ie het op een unix bak ineens in 15 minuten doet ofzo.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Wat duurt nu zo lang? Ben je de html nu aan het indexeren, of ben je al bezig te zoeken?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

doe je voor elk keyword een aparte insert?
denk dat het wel aan je code zal liggen of je bak kan het niet aan...

:7 tot me tanden toe bewapend met me potterstokkie :Y)

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 11:50 schreef PhoneTechnician het volgende:

[..]

De CPU zal waarschijnlijk in de computer zitten..Als die er niet in zit, dan heb je een probleem ;)
Damn, moet ik weer een schroevedraaier zoeken... :P

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 06 maart 2002 11:55 schreef mvkooten het volgende:
Mijn db model:

tabel keywords_list,
key_id (int 10)
page_id (text)
Tik fout hoop ik?
moet ik ook mijn code plaatsen?

En het zal op unix bets beter gaan, geloof ik graag :)
maar hij is nu, na bijna 1,5 uur nog steeds bezig en ik geloof niet dat ie het op een unix bak ineens in 15 minuten doet ofzo.
Code plaasten is een goed idee....
Maar plaats alleen het relevante gedeelte!

En unix is sneller, maar verwacht daar geen wonderen van. En ik denk ook niet dat het probleem bij je systeem ligt maar eerder bij de logica. Aangezien 1500 files niet zo veel zijn....

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Op woensdag 06 maart 2002 11:57 schreef Janoz het volgende:
Wat duurt nu zo lang? Ben je de html nu aan het indexeren, of ben je al bezig te zoeken?
Nee, de data die in de database gezet wordt. Dat duurt zolang. Ik heb de pagina die dit doet al lang getsopt. Maar de data blijft nog steeds in mijn db stromen.
Elke keer als ik op refresh druk bij phpMyAdmin staat er weer meer keywords en url's in.

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 11:58 schreef woeitje het volgende:
doe je voor elk keyword een aparte insert?
denk dat het wel aan je code zal liggen of je bak kan het niet aan...

:7 tot me tanden toe bewapend met me potterstokkie :Y)
Uhmm.. ja, ik doe voor elke keyword een aparte insert...
(is dit erg dom?)

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:01 schreef LuCarD het volgende:

[..]

Tik fout hoop ik?
[..]
Uhmm.. nee.
Het is text, want hier worden alle urls in opgeslagen waar dit keyword zich in bevind.
B.v. url_id 1,2,5,8,23,40

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op woensdag 06 maart 2002 12:07 schreef mvkooten het volgende:

[..]

Uhmm.. nee.
Het is text, want hier worden alle urls in opgeslagen waar dit keyword zich in bevind.
B.v. url_id 1,2,5,8,23,40
**alarm-toeter**.. Schending van de eerste normaal vorm...

Waarschijnlijk is dit je probleem..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Op woensdag 06 maart 2002 12:04 schreef mvkooten het volgende:
Uhmm.. ja, ik doe voor elke keyword een aparte insert...
(is dit erg dom?)
het kan ook zo:
code:
1
2
3
INSERT INTO table (x,y,z) VALUES ('x','y','z'),
                       ('x1','y1','z1'),
                       ('x2','y2','z2')

Zo kun je veel inserten in 1 query gaat je db niet zo snel over ze strot
Op woensdag 06 maart 2002 12:09 schreef Janoz het volgende:
**alarm-toeter**.. Schending van de eerste normaal vorm...
Waarschijnlijk is dit je probleem..
:Y) het is in iedergeval EEN probleem :) niezo netjes.

Verwijderd

Topicstarter
Ik vrees dat alle code relevant is, dus...
PHP:
1
<?//zet de tijd limiet op oneindig.set_time_limit(0); $dir = array("../test","../Web site/2vianen");//telt hoeveel mappen er doorgezocht worden.$teller = count($dir);for($dirI=0; $dirI<$teller; $dirI++){    //opent de map.    $opendir = opendir($dir[$dirI]);    //gaat alle bestanden in de map na.    while($filename = readdir($opendir))    {        //gebruikt de . &amp; .. &amp; ws_ftp bestanden niet.        if(($filename!=".")&amp;&amp;($filename!="..")&amp;&amp;($filename!="WS_FTP.LOG"))        {            //als het een map is, word deze toegevoegd aan $dir.            if(is_dir("$dir[$dirI]/$filename"))            {                array_push($dir, "$dir[$dirI]/$filename");            }            else            {                //hier worden alleen html &amp; htm bestanden doorgelaten.                if (eregi(".*\.html$", $filename)||eregi(".*\.htm$", $filename))                {                    print "$dir[$dirI]/$filename <br>";                    $filesize = filesize("$dir[$dirI]/$filename");                    $date = filemtime("$dir[$dirI]/$filename");                    //maak contact met de database.                    $dbname="kontakt";                    $user="root";                    $password="";                    $server="localhost";                    mysql_connect($server,$user,$password);                    mysql_select_db($dbname);                    $url=mysql_query("select url, filesize, date from page_data where url='$dir[$dirI]/$filename'") or die ("ack! query failed: "                    ."<li>errorno=".mysql_errno()                    ."<li>error=".mysql_error()                    ."<li>query=".$url);                                        //tellen hoeveel er gevonden zijn.                    $rtel = mysql_num_rows($url);                    if($rtel==0)                    {                        //bestand openen en code opslaan.                        $bestand = "$dir[$dirI]/$filename";                        $fd = fopen ($bestand, "r");                        $code = fread ($fd, filesize ($bestand));                        fclose ($fd);                        //de titel los in variabele zetten.                        preg_match_all ("!\<title>(.+?)</title>!i", $code, $matches);                        for ($i=0; $i< count($matches[0]); $i++)                            {                                $titel = $matches[1][$i];                                //alle gevaarlijk tekens backspacen \                                $titel = addslashes($titel);                            }                        $code = ereg_replace("(<head>)(.*)(</head>)", "<head> </head>", $code);                        //alleen de teskt tussen </head> en </body> gebruiken.                        preg_match_all ("!\</head>(.+?)</body>!i", $code, $matches);                        for ($i=0; $i< count($matches[0]); $i++)                            {                                $code = $matches[1][$i]."\n";                            }                        //HTML codes verwijderen                        $code = strip_tags($code);                        //omshrijving voor onder de zoekresultaten opslaan.                        $omschrijving = substr($code, 0, 300);                        //alle gevaarlijk tekens backspacen \                        $omschrijving = addslashes($omschrijving);                        //De url + info opslaan in db.                        $query = "insert into page_data (url,title,desc2,filesize,date) values                        ('$dir[$dirI]/$filename','$titel','$omschrijving','$filesize','$date')";                        mysql_query($query) or die ("ack! query failed: "                        ."<li>errorno=".mysql_errno()                        ."<li>error=".mysql_error()                        ."<li>query=".$query);                        //Alles onderscore maken                        $code = strtolower($code);                        //alle gevaarlijk tekens backspacen \                        $code = addslashes($code);                        //alle nutteloze tekens zoals o.a. spaties en enters weghalen                        $code = preg_replace('![[:space:]]+!', ',', $code);                        //code filteren                        $filter = array(",de,", ",het,", ",een,", ",van,", ",in,", ",op,", ",en,", ",er,", ",dan,", ",maar,", ",als,", ",heeft,", ",wel,", ",niet,", ",aan,", ",dat,", ",is,", ",je,", ",ik,", ",wij,", ",we,", ",onze,", ",jullie,", ",ons,", ",hij,", ",zij,", ",mij,", ",", ".", "!", "?", ":", "\"", "(", ")", ",werd,", ",kunt,", ",per,", ",geen,", ",te,", ",kan,", ",nog,", ",me,", ",wordt,", ",was,", ",gaan,", ",met,", ",die,", ",hebben,", ",voor,", ",willen,", ",maken,", ",waarna,", ",om,", ",ben,", ",alle,", ",bij,", ",zijn,", ",door,", ",men,", "&amp;#148;", "&amp;#146;", ";", ",wie,", ",ze,", ",-,", ",ja,", ",nee,", ",ook,", ",had,", ",al,", ",mijn,", ",heb,", ",betreft,", ",wat,", ",soms,", ",kontakt,", ",edities,", ",bv,", ",ter,", ",na,", ",blijft,", ",over,", ",komt,", ",vind,", ",vindt,", ",u,", ",der,", ",moeten,", ",worden,", ",mee,", ",heel,", ",gaat,", ",zo,", "/", ",wil,", ",tot,", ",ene,", ",legt,", ",uit,", ",daar,", ",mag,", ",wanneer,", ",spreekt,", ",vanaf,", ",neer,", ",nu,");                        //de woorden filteren uit filter 1.                        for($i=0; $i<count($filter); $i++)                        {                            $code = str_replace($filter[$i], ",", $code);                        }                        //van een string een array maken.                        $array1 = explode(",", $code);                        //alle dubbele waardes eruit halen.                        $array2 = array_unique($array1);                        //alle lege velden weghalen.                        $naarDB = array_values(array_unique($array2));                                                for($i=0; $i<count($naarDB); $i++)                        {                            //print bij welk woord die is.                            //print "-".$naarDB[$i]."-<br>";                            //URL ophalen van de pagina waar je nu de keywoorden van opslaat.                            $controleURL=mysql_query("select page_id from page_data where url='$dir[$dirI]/$filename'") or die ("ack! query failed: "                            ."<li>errorno=".mysql_errno()                            ."<li>error=".mysql_error()                            ."<li>query=".$controleURL);                            While ($row = mysql_fetch_array($controleURL))                            {                                $UrlId=$row[page_id];                            }                            mysql_free_result($controleURL);                            //URL lijst opvragen van de keywoorden in de db.                            $controle=mysql_query("select page_id from keywords_list where woord='$naarDB[$i]'") or die ("ack! query failed: "                            ."<li>errorno=".mysql_errno()                            ."<li>error=".mysql_error()                            ."<li>query=".$controle);                            While ($row = mysql_fetch_array($controle))                                {                                    $UrlId2=$row[page_id];                                }                                                        //controleren of keyword al bestaat.                            $rtel2 = mysql_num_rows($controle);                            mysql_free_result($controle);                            //als het keyword nog niet bestaat.                            if($rtel2==0)                            {                                $query = "insert into keywords_list (page_id,woord) values                                ('$UrlId','$naarDB[$i]')";                                mysql_query($query) or die ("ack! query failed: "                                ."<li>errorno=".mysql_errno()                                ."<li>error=".mysql_error()                                ."<li>query=".$query);                            }                            else                            {                                //URL toevoegen aan de lijst van het keyword.                                $URLtoevoegen = "$UrlId2,$UrlId";                                $query = "Update keywords_list set page_id='$URLtoevoegen' where woord='$naarDB[$i]'";                                mysql_query($query) or die ("ack! query failed: "                                ."<li>errorno=".mysql_errno()                                ."<li>error=".mysql_error()                                ."<li>query=".$query);                            }                        }                    }                }            }        }    }    //dir sluiten.    closedir($opendir);    //telt opnieuw, want er kan een nieuwe map begezet zijn.    $teller = count($dir);    print "Das fijn :)";}?>

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:09 schreef Janoz het volgende:

[..]

**alarm-toeter**.. Schending van de eerste normaal vorm...

Waarschijnlijk is dit je probleem..
Ik moet er zeker een float van maken ofzo?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op woensdag 06 maart 2002 12:13 schreef mvkooten het volgende:

[..]

Ik moet er zeker een float van maken ofzo?
nope.. Je slaat meerdere gegevens op in 1 veld. Dit is een schending van de allereerste normaalvorm.. De juiste oplossing is gebruik te maken met een 1-N koppeltabel.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Grum
  • Registratie: Juni 2001
  • Niet online
gniffel - dit is wel heel erg te optimizen zeg :)

Dingen die me nu kippenvel bezorgden - alles

[zal zo even een lijst maken - als ik tijd heb]

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:14 schreef Janoz het volgende:

[..]

nope.. Je slaat meerdere gegevens op in 1 veld. Dit is een schending van de allereerste normaalvorm.. De juiste oplossing is gebruik te maken met een 1-N koppeltabel.
Uhhh... ja.

Ik geloof dat ik begrijp wat je bedoelt. Ik moet een nieuwe tabel voor de page_id maken.

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:18 schreef Grum het volgende:
gniffel - dit is wel heel erg te optimizen zeg :)

Dingen die me nu kippenvel bezorgden - alles

[zal zo even een lijst maken - als ik tijd heb]
Ik ben nog niet zolang bezig en ik heb mezelf alles (misschien fout :) ) aangeleerd.
Ik vond het al heel wat dat ik het idee werkende kreeg :)

  • Grum
  • Registratie: Juni 2001
  • Niet online
heb je trouwens enig idee of ie uberhaubt wel insert wat jij WIL dattie insert ? >:)

want aan je code & comments te zien klopt dat niet echt :)

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:21 schreef Grum het volgende:
heb je trouwens enig idee of ie uberhaubt wel insert wat jij WIL dattie insert ? >:)

want aan je code & comments te zien klopt dat niet echt :)
zover ik weet, doet ie precies wat ik wil.

Verwijderd

Topicstarter
De tabel zou er zo uit moeten zien dan?

Tabel keywords_list,
key_id (int 10)
woord (varchar 255)

Tabel page_data,
page_id (int 10)
url (varchar 255)
title (varchar 60)
desc2 (text)
filesize (int 10)
date (int 12)

Tabel url
key_id (int 10)
page_id (int 10)

  • Grum
  • Registratie: Juni 2001
  • Niet online
code:
1
2
//de titel los in variabele zetten
preg_match_all ("!\<title>(.+?)</title>!i", $code, $matches);

dat doet echt niet wat jij erboven zegt hoor :)

beetje rare \ voor die < :+
code:
1
$code = ereg_replace("(<head>)(.*)(</head>)", "<head> </head>", $code);

waarom doe je dat ?

BTW .. waarom wil je in godsnaam ELK woord buiten de tags om in je database hebben ?
code:
1
2
//Alles onderscore maken
$code = strtolower($code);

je bedoeld 'lowercase' maken ? alles underscore maken doe je met preg_replace('!.!','_', $string); :+
code:
1
2
//alle gevaarlijk tekens backspacen \
$code = addslashes($code);

backspacen ? >:) ... backslashen bedoel je :P

[edit more to come]

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:09 schreef woeitje het volgende:

[..]

het kan ook zo:
code:
1
2
3
INSERT INTO table (x,y,z) VALUES ('x','y','z'),
                       ('x1','y1','z1'),
                       ('x2','y2','z2')

Zo kun je veel inserten in 1 query gaat je db niet zo snel over ze strot
[..]
Dit zou nu, met de nieuwe indeling, idd veel beter zijn :)

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:28 schreef Grum het volgende:
code:
1
2
//Alles onderscore maken
$code = strtolower($code);

je bedoeld 'lowercase' maken ? alles underscore maken doe je met preg_replace('!.!','_', $string); :+
code:
1
2
//alle gevaarlijk tekens backspacen \
$code = addslashes($code);

backspacen ? >:) ... backslashen bedoel je :P

[edit more to come]
Idd, je hebt gelijk.
Toen wist ik ook nog niet dat iemand anders dit ging lezen... :P

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 06 maart 2002 12:27 schreef mvkooten het volgende:
De tabel zou er zo uit moeten zien dan?

Tabel keywords_list,
key_id (int 10)
woord (varchar 255)

Tabel page_data,
page_id (int 10)
url (varchar 255)
title (varchar 60)
desc2 (text)
filesize (int 10)
date (int 12)

Tabel url
key_id (int 10)
page_id (int 10)
Dat ziet er al veeeeeel beter uit.

2 opmerkingen.

page_data.date (int 12) zou moeten worden page_data.date (date of timestamp)
page_data.date: date is een reserved word en dat kan problemen geven. Geef hem een andere logischenaam. Wat dacht je van datum?

Hoe zit het trouwens met indexen, autonummer velden, unique?

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:28 schreef Grum het volgende:
code:
1
2
//de titel los in variabele zetten
preg_match_all ("!\<title>(.+?)</title>!i", $code, $matches);

dat doet echt niet wat jij erboven zegt hoor :)

beetje rare \ voor die < :+
Het werkt wel :?
Hij haalt de tekst tussen de <title></title> vandaan en die word in en variabele gezet.

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:28 schreef Grum het volgende:
code:
1
$code = ereg_replace("(<head>)(.*)(</head>)", "<head> </head>", $code);

waarom doe je dat ?

BTW .. waarom wil je in godsnaam ELK woord buiten de tags om in je database hebben ?

[edit more to come]
In de head staat allemaal vage javscript shit (van GoLive :r ) en dat leverde soms problemen op. Dan werkte
code:
1
2
//alleen de teskt tussen </head> en </body> gebruiken.
preg_match_all ("!\</head>(.+?)</body>!i", $code, $matches);

niet lekker meer. Aangezien ik die code toch niet in mijn db wilde, gooi ik het er eerst uit.

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:35 schreef LuCarD het volgende:

[..]

Dat ziet er al veeeeeel beter uit.

2 opmerkingen.

page_data.date (int 12) zou moeten worden page_data.date (date of timestamp)
page_data.date: date is een reserved word en dat kan problemen geven. Geef hem een andere logischenaam. Wat dacht je van datum?

Hoe zit het trouwens met indexen, autonummer velden, unique?
Ok ik zal alles nl namen geven.
Ik werk niet met date, omdat ik in seconde werk. Dat kan ik ook omzetten, maar leek mij niet nodig.

keywords_list.key_id en page_data.page_id zijn beide auto_increment en uniek.

Bij de nieuwe tabel zou dit niet nodig zijn.
De combinatie is altijd uniek.

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

voor elk gevonden HTML bestand open je een NIEUWE DB CONNECTIE??? dan vind ik het niet gek dat het zo traag gaat!! waarom doe je dat??

Signature van nature


Verwijderd

Topicstarter
Op woensdag 06 maart 2002 12:53 schreef Sircuri het volgende:
voor elk gevonden HTML bestand open je een NIEUWE DB CONNECTIE??? dan vind ik het niet gek dat het zo traag gaat!! waarom doe je dat??
Sorry, ik moest ff weg.

Waarom ik dat doe.

Eerst moet ik controleren of het bestand de url al bestaat, zodat de volgende keer dat de html bestanden doorzocht worden op nieuwe bestanden, niet weer alle bestanden worden uitgelezen.
Stel ik heb nu de pagina's 1.hmtl, 2.html, 3.html, 4.html.
Nu wil ik de pagina's indexeren, dan worden deze 4 geindexeerd.
Morgen zet ik de pagina's 5.html, 6.html, 7.html erbij.
Nu wil ik opnieuw indexeren, maar de pagina's 1.html t/m 4.html hoeven niet meer geindexeerd te worden.

Dus bij elke pagina die geindexeerd word, word er eerst gekeken of deze al geindexeerd is. Zo ja, ga dan door naar de volgende.

Moet dit ook op een hele andere manier?

  • Grum
  • Registratie: Juni 2001
  • Niet online
Je hoeft niet elke keer een db connectie op te starten maar dat is niet wat zo sloom gaat.

Het gaat voornamelijk sloom omdat je welk woord gaat controleren of je het al hebt in de database.

Je doet gewoon teveel met de database (met een slecht db ontwerp).

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 14:03 schreef Grum het volgende:
Je hoeft niet elke keer een db connectie op te starten maar dat is niet wat zo sloom gaat.

Het gaat voornamelijk sloom omdat je welk woord gaat controleren of je het al hebt in de database.

Je doet gewoon teveel met de database (met een slecht db ontwerp).
Wat is wel een goed ontwerp dan?

Want dit ontwerp, lijkt me eigenlijk ook niet goed.

Tabel keywords_list,
key_id (int 10)
woord (varchar 255)

Tabel page_data,
page_id (int 10)
url (varchar 255)
title (varchar 60)
desc2 (text)
filesize (int 10)
date (int 12)

Tabel url
key_id (int 10)
page_id (int 10)

Hier zou je een enorm veel records in de Tabel url krijgen.
Je krijgt dan voor elk woord in elke url een aparte key_id en page_id.
Dan kan je net zo goed de tabel url weglaten en bij tabel keywords_list de key_id veranderen in url(en bij tabel page_data page_id weghalen). Dan krijg je net zoveel records als in de tabel url, maar dan kan je de tabel url weglaten.

Hoef je geen vergelijkingen meer te doen, maar heb je wel een tabel met tienduizenden (misschien nog meer) records.

Is deze manier beter dan de vergelijkingen maken?

Verwijderd

Op woensdag 06 maart 2002 12:53 schreef Sircuri het volgende:
voor elk gevonden HTML bestand open je een NIEUWE DB CONNECTIE??? dan vind ik het niet gek dat het zo traag gaat!! waarom doe je dat??
Is erg onnodig en lelijk maar niet zo heel erg.
Als hij al bestaat geeft hij alleen de resource identifier terug. (kost wel tijd natuurlijk maar niet zo heel veel).

Zo'n overbodige mysql_select_db maakt de boel wel aanzienlijk trager maar ook dat is niet het ergste aan dit script.

In het stuk onder

for($i=0; $i<count($naarDB); $i++)

staan een heel stel selects en een paar update's. Dat maakt de boel zo traag.
Laat eens een tellertje meelopen en kijk eens hoeveel slecets, inserts en updates je nou daadwerkelijk doet. Niet schrikken.

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 14:39 schreef MarcoTC het volgende:

[..]

Is erg onnodig en lelijk maar niet zo heel erg.
Als hij al bestaat geeft hij alleen de resource identifier terug. (kost wel tijd natuurlijk maar niet zo heel veel).

Zo'n overbodige mysql_select_db maakt de boel wel aanzienlijk trager maar ook dat is niet het ergste aan dit script.

In het stuk onder

for($i=0; $i<count($naarDB); $i++)

staan een heel stel selects en een paar update's. Dat maakt de boel zo traag.
Laat eens een tellertje meelopen en kijk eens hoeveel slecets, inserts en updates je nou daadwerkelijk doet. Niet schrikken.
Idd, dat zijn er veel.

Maar deze kan ik dus voorkomen als ik alles er gewoon ingooi en zo (stel gemiddeld zo'n 100 keywords in een bestand) 100 keywords x 1500 bestanden = 150.000 records in een tabel krijg.
Zoals boven beschreven.

Is dit een betere manier?

  • Grum
  • Registratie: Juni 2001
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
-- Table Pages 
CREATE TABLE Pages
(
  Id        int unsigned not null auto_increment,
  URL      varchar 255 not null default '',
  Title  varchar 255 not null default '',
  Description varchar 255 not null default '',
  Size    int unsigned not null default 0,
  Datum  timestamp default null,
  index URLIndex URL,
  unique URL,
  primary key(Id)
);  
  
-- Table Keywords
CREATE TABLE Keywords
(
  Id        int unsigned not null auto_increment,
  Word    varchar 255 not null default '',
  index WordIndex Word,
  unique Word,
  primary key(Id)
);

-- Table PageKeywords
CREATE TABLE PageKeywords
(
  PageId    int unsigned not null default 0,
  WordId    int unsigned not null default 0,
  index PageIdIndex PageId,
  index WordIdIndex WordId,
  unique (PageId, WordId)
);

zoiets :)

edit:

Dit zou copy/pastebaar moeten zijn in mysql ... maar geen 'garanties' dat et werkt .. tik et ook maar in uit me kop.


[edit2]
Dit zou misschien nog iets beter zijn:
code:
1
2
3
4
5
6
7
CREATE TABLE PageKeywords
(
  PageId    int unsigned not null default 0,
  WordId    int unsigned not null default 0,
  index PageWordIdIndex (PageId, WordId),
  unique (PageId, WordId)
);

Maar nu moet je wel opletten dat je ALTIJD dezelfde where volgorde hebt:
code:
1
WHERE PageId .... and WordId ....

Anders maaktie er alsnog geen gebruik van.
[/edit2]

Verwijderd

Topicstarter
En dan??

Je bedoelt voor elk woord een unieke record maken in TABLE Keywords.
Vervolgens voor elk woord uit elke pagine een unieke record maken in TABLE PageKeywords.

Dus dan krijg je zoiets?
code:
1
2
3
4
5
6
7
TABLE Keywords
id  1     2     3     4
word    a     b     c     d

TABLE PageKeywords
PageId  1     1     1     2     2     2
WordId  a     c     d     a     b     c

edit:

hmzz.. de opmaak is weggevallen, maar je begrijpt wat ik bedoel.
Op deze manier krijg je nog die 150.000 records.


edit:

En de opmaak is weer teruggevallen ;)

  • Grum
  • Registratie: Juni 2001
  • Niet online
bijna .. want WordId is een getal :)

maar ik denk niet dat je et veel 'NF'-er meer kan krijgen dan dit :)

Verwijderd

Topicstarter
Op woensdag 06 maart 2002 15:18 schreef Grum het volgende:
bijna .. want WordId is een getal :)

maar ik denk niet dat je et veel 'NF'-er meer kan krijgen dan dit :)
Ja ok, sorry.

Maar je krijgt dan dus 150.000 records en dat maakt niet uit?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Netje uitgelegd Grum.....

Een pluim voor Grum ;)

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Op woensdag 06 maart 2002 15:28 schreef LuCarD het volgende:
Netje uitgelegd Grum.....

Een pluim voor Grum ;)
Het is idd allemaal erg netjes en duidelijk behalve de vraag of het nou uitmaakt die 150.000 records.
Of maakt dat geen zak uit, kan mysql zoiets makkelijk aan en wordt het zoeken daarin niet erg traag??

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 06 maart 2002 15:32 schreef mvkooten het volgende:

[..]

Het is idd allemaal erg netjes en duidelijk behalve de vraag of het nou uitmaakt die 150.000 records.
Of maakt dat geen zak uit, kan mysql zoiets makkelijk aan en wordt het zoeken daarin niet erg traag??
Ja hoor dat kan MySQL wel aan....

de records zijn niet groot...

http://www.mysql.com/doc/T/a/Table_size.html

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Ok, bedankt!!!

Dan ga ik nu ff knutselen en het resultaat bekijken :)

Ps. ik weet dat dit niet gewenst is, maar ik vind het aso als je zomaar niets meer van je laat horen ;)

  • Grum
  • Registratie: Juni 2001
  • Niet online
Het is niet echt de bedoeling maar wel gewenst :)

Het is ook leuk als je even zegt of het is gelukt als je klaar bent .. en voor verdere problemen ... je bent welkom :)

BTW ... 150.000 records maakt nix uit ... wij draaien een dnsserver met dat aantal records en zoals je begrijpt zal dit groeien en groeien en MAG het niet traag worden.

Dit word het ook niet zolang je maar goede indices hebt (en die heb ik erbij gezet) dan trek je zonder enig probleem tot velen miljoenen records zonder over de 1 sec query time heen te gaan.

Verwijderd

Topicstarter
hehehe, beter!!

Ik slaap weer lekker vanacht *D

Ik post mijn volgende code zeker, dus tot dan :P
Pagina: 1