abonnement Unibet Coolblue Bitvavo
pi_56975189
quote:
Op maandag 25 februari 2008 22:26 schreef The_Terminator het volgende:

[..]

Opzich is het niet traag, meestal doet het script er 0,1 sec of nog minder over om iets te vinden. Het gaat mij erom dat ik merk dat het steeds trager begint te worden, en ik ben bang dat het na verloop van tijd alleen maar achteruitgaat met de snelheid.

Ik heb gewoon topics aan woorden gekoppeld via een losse tabel. Als iemand naar een woord zoekt dan wordt dat woord in de database opgezocht, dat woord bevat weer een ID dat weer in een andere tabel wordt opgezocht en in die tabel staan de topics waar het woord voorkomt en hoe vaak het voorkomt (om de relevantie te bepalen). Vervolgens haal ik de titel, TS, topicid en datum van het topic uit een losse tabel en dat wordt op de pagina geprint.

Kan me eigenlijk niets beter bedenken dan bovenstaande.
Wat voor indexes gebruik je precies, en van wat voor type zijn die? En hoe match je op de woorden, doe je dat letterlijk (where field = "blaat"), met een LIKE of met een fulltext search?
  maandag 25 februari 2008 @ 23:02:23 #102
84926 WyriHaximus
Release the hounds smithers!
pi_56975641
quote:
Op maandag 25 februari 2008 22:37 schreef Farenji het volgende:

[..]

Dan is niet alleen je PC brak.
Ja of wel, afaik kan PHP niet maar geheugen assignen dan de hoeveelheid RAM die je hebt. Tenminste daar liep ik tegen aan toen ik aan het kutten was met een bitmap in een array stoppen (NIET DOEN!!!) .
phluphy for president!
pi_56976950
quote:
Op maandag 25 februari 2008 22:47 schreef Farenji het volgende:

[..]

Wat voor indexes gebruik je precies, en van wat voor type zijn die? En hoe match je op de woorden, doe je dat letterlijk (where field = "blaat"), met een LIKE of met een fulltext search?
Ik heb de woorden tabel geindexeerd en de verwijzing ernaar in de andere tabel ook. Het is gewoon het standaard type, ik doe dat op de volgende manier:

1$query = "CREATE INDEX zoekwoord_ix ON woorden (zoekwoord)";


Verder gebruik ik idd gewoon where, en de search kan naar meerdere woorde zoeken, dat kan zowel met een OR of AND operator.

Het script zoekt eerst naar het woord in de database en voert dat voor elk woord uit en daar komen dan topicnummers voor terug. Vervolgens worden de gevonden topics in een array gezet en krijgen ze een bepaalde score. Als een woord vaker voorkomt in een bepaald topic dan wordt die score verhoogd. Vervolgens sorteer ik die array en komen de meest relevante topics bovenaan te staan, als datum als sorteervolgorde is gekozen dan worden gewoon de topics met het grootste of kleinste topicnr. bovenaan gezet. Vervolgens kijkt het script of alle opgegeven woorden (als AND is gebruikt) voorkomen in een bepaald topic en worden de resultaten die doorkomen op de pagina geprint. Bij OR worden gewoon alle resultaten geprint.
pi_56979953
quote:
Op maandag 25 februari 2008 22:34 schreef ErikN het volgende:
+ ik weet dat het kan. Heb er ook al wel wat over gelezen. Alleen begrijp er niet veel van nog...
Je kunt een script toch na xxx records 3 seconden laten wachten het script middels header weer aanroepen en verder gaan waar je gebleven bent? zo draai ik cronjobs voor databases met meer dan 1 milj records!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_56980209
Ik denk dat een FULLTEXT search wel sneller is dan een WHERE / LIKE?

Chandler: codevoorbeeldje?
pi_56980839
quote:
Op maandag 25 februari 2008 23:02 schreef WyriHaximus het volgende:

[..]

Ja of wel, afaik kan PHP niet maar geheugen assignen dan de hoeveelheid RAM die je hebt. Tenminste daar liep ik tegen aan toen ik aan het kutten was met een bitmap in een array stoppen (NIET DOEN!!!) .
Je hebt natuurlijk altijd geheugenbeperkingen maar dat ligt ook aan de implementatie. Met 1 image die je wil verwerken heb je weinig keus maar als je bijv een db import draait dan moet je natuurlijk niet die hele import eerst in je geheugen lezen en daarna pas wegschrijven. Als je dit netjes per record itereert dan kost het nauwelijks geheugen. Ik maak zelf regelmatig scripts voor tabellen met miljoenen rows, geen enkel probleem.
  dinsdag 26 februari 2008 @ 10:55:03 #107
84926 WyriHaximus
Release the hounds smithers!
pi_56981946
quote:
Op dinsdag 26 februari 2008 09:53 schreef Farenji het volgende:

[..]

Je hebt natuurlijk altijd geheugenbeperkingen maar dat ligt ook aan de implementatie. Met 1 image die je wil verwerken heb je weinig keus maar als je bijv een db import draait dan moet je natuurlijk niet die hele import eerst in je geheugen lezen en daarna pas wegschrijven. Als je dit netjes per record itereert dan kost het nauwelijks geheugen. Ik maak zelf regelmatig scripts voor tabellen met miljoenen rows, geen enkel probleem.
Je moet natuurlijk wel je script fatsoenlijk bouwen idd. Maar me punt was meer dat het aan ze bak kon liggen (niet waarschijnlijk). Aan de andere kant heb ik hier een oude P3 met 196MB RAM staan als thuis servertje die scripts draait waar rustig 90.000 reccords door heen worden geschoten dus het moet een aardige brakke dev bak zijn dan .
phluphy for president!
pi_56987605
quote:
Op dinsdag 26 februari 2008 09:08 schreef Xcalibur het volgende:
Ik denk dat een FULLTEXT search wel sneller is dan een WHERE / LIKE?

Chandler: codevoorbeeldje?
In stappen.
session_start

select * from tabel LIMIET $_SESSION['start'], 250

$_SESSION['start'] = $_SESSION['start'] + 250;

sleep(300);

header("location: zelfde script");

voorbeeld genoeg?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_56989919
quote:
Op maandag 25 februari 2008 23:55 schreef The_Terminator het volgende:

[..]

Ik heb de woorden tabel geindexeerd en de verwijzing ernaar in de andere tabel ook. Het is gewoon het standaard type, ik doe dat op de volgende manier:
[ code verwijderd ]

Verder gebruik ik idd gewoon where, en de search kan naar meerdere woorde zoeken, dat kan zowel met een OR of AND operator.

Het script zoekt eerst naar het woord in de database en voert dat voor elk woord uit en daar komen dan topicnummers voor terug. Vervolgens worden de gevonden topics in een array gezet en krijgen ze een bepaalde score. Als een woord vaker voorkomt in een bepaald topic dan wordt die score verhoogd. Vervolgens sorteer ik die array en komen de meest relevante topics bovenaan te staan, als datum als sorteervolgorde is gekozen dan worden gewoon de topics met het grootste of kleinste topicnr. bovenaan gezet. Vervolgens kijkt het script of alle opgegeven woorden (als AND is gebruikt) voorkomen in een bepaald topic en worden de resultaten die doorkomen op de pagina geprint. Bij OR worden gewoon alle resultaten geprint.
Dit klinkt als heel veel losse stappen. Wat ik zou doen is mysql het zware werk laten doen: een dergelijke zoekmethode kun je volgens mij prima vangen in 1 of 2 queries die je opbouwt aan de hand van de argumenten (zoekwoorden, sorteervolgorde, AND/OR). Mysql is oha veel efficienter in sorteren van resultaten dan je zelf ooit kan doen in php. Er zijn ook vele verschillende sorteeralgoritmes, de een efficienter dan de ander, en de een is ook geschikter voor een bepaalde taak dan de ander, je moet maar net de juiste kiezen. Mysql zal meestal de best (beschikbare) methode gebruiken. Het zou goed kunnen dat daar je bottleneck ligt.

Als je dan die ene query ook nog zo efficient mogelijk maakt (EXPLAIN is je vriend - hiermee zie je of je indexes ook optimaal gebruikt worden) dan kom je volgens mij aardig in de buurt van optimaal zoeken.
pi_56991661
quote:
Op dinsdag 26 februari 2008 15:08 schreef Chandler het volgende:
voorbeeld genoeg?
is op zich wel simpel he, eigenlijk
Waarom zit die sleep() er nou nog in?
pi_56992287
om je script te pauzeren, echter kun je dan daarvoor beter als je een mysql connectie hebt gemaakt deze sluiten met mysql_close of je doet een refresh middels javascript!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_56992481
quote:
Op dinsdag 26 februari 2008 18:22 schreef Chandler het volgende:
om je script te pauzeren, echter kun je dan daarvoor beter als je een mysql connectie hebt gemaakt deze sluiten met mysql_close of je doet een refresh middels javascript!
Waarom wil je er een pauze in ? Je pakt toch max 250 tegelijk, waarom de pauze?
ne okuyon, bokmu var?
pi_56992627
Ik snap dat die sleep erin zit om het ding te pauzeren, maar (zoals Saban terecht vraagt) waarom de pauze?
pi_56996144
waarom niet saban, je gunt de server zo even wat meer ademruimte, zekers handig als je op een shared server zit
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  dinsdag 26 februari 2008 @ 22:21:15 #115
12880 CraZaay
prettig gestoord
pi_56998618
quote:
Op dinsdag 26 februari 2008 20:37 schreef Chandler het volgende:
waarom niet saban, je gunt de server zo even wat meer ademruimte, zekers handig als je op een shared server zit
Je gunt die server helemaal niets, aangezien iedere actie pas wordt gestart als de vorige is afgerond. Het kan een server echt niets schelen of 'ie continu door moet of 3 seconden rust krijgt.
  woensdag 27 februari 2008 @ 12:22:40 #116
136730 PiRANiA
All thinking men are atheists.
pi_57008120
Ik heb een vraagje.
Ik wil van een tabel `data` de laatste 30 rijen halen. Ik heb er een timestamp bij.

Dit meot dus met LIMIT. Maar hoe moet het als ik de laatste 30 wil EN de volgorde wil behouden?
pi_57008768
Welke volgorde?
"Reality is an illusion created by a lack of alcohol."
  woensdag 27 februari 2008 @ 13:36:15 #118
12880 CraZaay
prettig gestoord
pi_57009822
ORDER BY timestamp DESC, LIMIT 30

Geeft de 30 rows met de hoogste timestamps, van hoog naar laag.
pi_57009997
quote:
Op dinsdag 26 februari 2008 20:37 schreef Chandler het volgende:
waarom niet saban, je gunt de server zo even wat meer ademruimte, zekers handig als je op een shared server zit
Of je je script nou nu aanroept of over 3 seconde, wat maakt dat uit?
Ik weet wat de sleep command doet, maar ik zie er geen voordeel in.
ne okuyon, bokmu var?
pi_57012467
Servers regelen hun eigen ademruimte wel door middel van kernel scheduling. En dat kan ie beter als de belasting van processen een beetje constant is, niet als het proces om de zoveel tijd opeens stilvalt en opeens weer vol doorgaat. Het werkt alleen averechts, zo'n sleep.
pi_57013231
Die sleep mag je idd vergeten, maar het script stoppen en dan na bv 3-5 seconden weer aanroepen lijkt mij beter voor de server, zelfde als 10000 emails in 1x versturen, dat vind een server ook niet leuk maar als je 250 per batch verstuurd is er niets aan de hand
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 27 februari 2008 @ 16:26:31 #122
12880 CraZaay
prettig gestoord
pi_57013423
Waarom zou een server dat iets kunnen schelen? Hij hoeft echt niet even af te koelen tussendoor hoor
  woensdag 27 februari 2008 @ 16:38:11 #123
136730 PiRANiA
All thinking men are atheists.
pi_57013709
quote:
Op woensdag 27 februari 2008 13:36 schreef CraZaay het volgende:
ORDER BY timestamp DESC, LIMIT 30

Geeft de 30 rows met de hoogste timestamps, van hoog naar laag.
SELECT * FROM `scores` WHERE `naam`='$speler' ORDER BY `tijd` ASC

limit 30 er achter en hij neemt de laatste 30?
pi_57013811
quote:
Op woensdag 27 februari 2008 16:18 schreef Chandler het volgende:
Die sleep mag je idd vergeten, maar het script stoppen en dan na bv 3-5 seconden weer aanroepen lijkt mij beter voor de server, zelfde als 10000 emails in 1x versturen, dat vind een server ook niet leuk maar als je 250 per batch verstuurd is er niets aan de hand
Dat ligt aan een maximum aantal mails per keer dat in de mailserverconfig ingesteld. Dat heeft niks met belasting te maken. Een server gaat niet kapot van belasting, volgens mij dicht je die dingen iets te veel menselijke eigenschappen toe
  woensdag 27 februari 2008 @ 16:42:58 #125
136730 PiRANiA
All thinking men are atheists.
pi_57013822
Voor de duidelijkheid, dit is er wat er in mijn tabel staat (fictief):

1
2
3
4
5
6
7
8
9


het vetgedrukte is wat ik wil hebben...
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')