[Databases] Snelheid en Amount Records

Pagina: 1
Acties:

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Poste deze vraag net in een topic van 3 jaar oud, en toen in verkeerde forum. Gaat lekker. Maar dus, Hehe, dus maar even nieuwe topic aangemaakt.
Heb een MySQL tabel die de komende 3 jaar tot 200 a 300 duizend records gaat oplopen.
Nu verwacht ik geen problemen, maar kan nergens vinden hoeveel records je database kan hebben zonder dat je hele erge traagheid krijgt.

Database bestaat uit 12 tabellen, waarvan er 11 niet boven 1000 a 2000 records uitkomen. Eentje dus waar bijna ALLE data in gaat zitten.

Als ik de tabel goed indexeer, hoe lang doet MySQL en PHP er dan over denk je om alle records in te lezen. Tabel bevat 9 velden met max. 250 tekens in totaal. (alle velden opgeteld)

Weet iemand dit?

mijn naam slaat nergens op, althans niet op mij :P


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Qua volume is het aantal records peanuts voor een database, ik denk dat je eerder aandacht dient te gaan schenken aan wat voor handelingen/bewerkingen je met al die records gaat doen.
Als je alle records in gaat lezen dan heeft een index trouwens geen zin.

Who is John Galt?


  • GlowMouse
  • Registratie: November 2002
  • Niet online
In een andere post postte elevator:
Als je alle records in wil gaan lezen, dan hebben indexen volgens mij weinig zin meer. De performance gaat erg afhankelijk zijn van de server (CPU, disksystem, RAM die je aan je MySQL toekent).

Ik denk dat je het vrij gemakkelijk kan testen door gewoon zeg 900k aan records te creeeren, en hier je mogelijke queries op gaat draaien?

Het harde limiet van MySQL ligt overigens veel hoger (kijk naar GoT welke zo'n 11 miljoen posts bevat en ook MySQL draaien)
en Zoolander:
Laten we zeggen: 2600 Mhz, 1000MB RAM, 7200RPM HDD dedicated?

  • whoami
  • Registratie: December 2000
  • Nu online
Sterker zelfs, indexen versnellen het ophalen van data, maar zorgen voor extra overhead bij het inserten/updaten van data. De indexen moeten dan immers aangepast worden.

https://fgheysels.github.io/


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Alle records inlezen zou enkel een test zijn om te kijken hoe mijn databaseje zich houdt onder de zwaarste query binnen de DB.
In de praktijk zullen er niet meer dan 100 records per keer worden opgehaald door max 3 personen tegelijk.

Alle tabellen zijn INNO DB btw.
Maar,hoef me dus geen zorgen te maken dat mijn ontwerp niet goed is ofzo.

hehe, mooi 8)

mijn naam slaat nergens op, althans niet op mij :P


  • whoami
  • Registratie: December 2000
  • Nu online
Zoolander schreef op 02 november 2003 @ 22:11:

Maar,hoef me dus geen zorgen te maken dat mijn ontwerp niet goed is ofzo.

hehe, mooi 8)
Ehm, toch wel. Het DB ontwerp is het belangrijkste van je database. Daar moet je zeker goed over nadenken. Als dat niet goed is, kan dat heel wat problemen veroorzaken.

https://fgheysels.github.io/


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
ja, dat weet ik. Maar omdat in dit ontwerp 1 tabel mega groot wordt twijfelde ik.
Geen zorgen hoor, met normaliseren kwam ik hier toch echt op uit. (na een paar keer terugdraaien, praktische wijzignen, enzo9

Maar ben blij dat MySQL 300.000 records makkelijk aannkan als er per keer max. 500 records opgehaald worden.

mijn naam slaat nergens op, althans niet op mij :P


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Even terugkomend.
Ben toch nog een beetje ongerust.
Hoe lang duurt een query die alle 300.000 records of laten we voor het gemak: 750.000 queries moet inlezen?
Aan de hand van die info moet hij een grafiek in SVG maken.

Nog steeds: MySQL4, PHP4, 2600MHZ 1000MB 7200RPM dedicated.

Tabel is INNODB met 7 velden waarvan er een join wordt gedaan op een tabel met 2 die ongeveer even groot is als de tabel met 7 velden.

Kan namelijk nergens goede benchmark vinden waar ik die info vandaan kan halen en anders MOET ik of mijn applicaties in andere DB schrijven of ander ontwerp.

Maar laten we er maar even vanuit gaan dat het ontwerp OK is en DB ook.

Weet iemand dit of weet iemand waar ik dit soort snelheidsvragen kan vinden in een grote tabel ergen of het net?

DANK!

mijn naam slaat nergens op, althans niet op mij :P


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Maak zelf een test? :? Er is al eerder wat verteld over het hoe en wat van MySQL; dit forum draait er op en er is al gezegd dat er tabellen zijn met 11 miljoen records. Verder zijn de statistieken na te kijken op de frontpage.

750.000 records is wel in te voegen in een database met dummy data.

En 750.000 queries 'ophalen' (of bedoel je uitvoeren?) kan hij wel even mee bezig zijn. 750.000 records ophalen duurt ook wel even om dat door te sturen en te verwerken.

[ Voor 99% gewijzigd door gorgi_19 op 23-11-2003 13:45 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Zoolander schreef op 23 november 2003 @ 13:35:
Aan de hand van die info moet hij een grafiek in SVG maken.
Ik hoop voor je dat er vooral aggregate data in beeld moeten komen, anders gaat het renderen van die SVG ook nog redelijk wat tijd kosten. :D

Rustacean


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Voor een database maakt het niet erg veel uit of je nu 100.000 of 10.000.000 records in een tabel hebt staan. (Zolang er maar gebruik gemaakt kan worden van indices).

Je moet je een telefoonboek voorstellen. Het zoeken naar 1 persoon in een telefoonboek met 10.000.000 nummers gaat niet noemenswaardig veel langzamer dan in een telefoonboek met 100.000 nummers.

Siditamentis astuentis pactum.


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

whoami schreef op 02 november 2003 @ 22:06:
Sterker zelfs, indexen versnellen het ophalen van data, maar zorgen voor extra overhead bij het inserten/updaten van data. De indexen moeten dan immers aangepast worden.
Ook het inserteren van data kan sneller verlopen. Het controleren op duplicaten en foreign keys gaat immers sneller.

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 16-08 19:14

Eelke Spaak

- Vlad -

Ik zou best een oordeel over je databaseontwerp willen vellen (waar je min of meer naar vraagt), maar dat wordt wat moeilijk op basis van alleen het aantal tabellen en het feit dat ééntje daarvan toevallig veel groter gaat worden dan de rest.

Kortom, als je je ontwerp beoordeeld wil hebben moet je even de structuur van alle tabellen (liefst met wat uitleg) hier posten. :)

TheStreme - Share anything with anyone


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Hmm, Vladimir: Zal ik doen als ik er niet meer uitkom.
Maar ik keek idd net bij zoeken in GOT en daar zie je: Zoek op het wordt ja:

"Er zijn ongeveer 167158 resultaten, verdeeld over 5572 pagina's, op deze pagina zijn 167128 niet weergegeven vanwege rechtenconflicten.
Er is gezocht op: ja
Woord frequenties: ja: 273541
Database van 811491 documenten doorzocht in 0,417s."

Dus dus 1.000.000 records doorzoeken lijkt me dan ook penuts: 4 of 5 seconden!
Displayen is alles wat we nodig hebben.

maar wat is Aggregate data? De SVG data is 1 woord + 1 int en dat 8 keer. Echter, per 1 int moeten ongeveer 150.000 int worden opgeteld.

Als GOT het kan met 11.000.000 moet ik met 750.000 wel aardig uit de voeten komen...... TOCH?

mijn naam slaat nergens op, althans niet op mij :P


  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

Aggregates zijn functies met een enkel resultaat op basis van meerdere tupels. Bijvoorbeeld SUM(), AVG() en COUNT().

Remember, if you have any trouble you can always send a telegram to the Right People.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Misschien een idee dan om een 'sommatietabel' te gaan maken, met zulke hoeveelheden records, waarbij de waarden al opgeteld zijn?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Hmm, probeerde even met een for-lus 1.000.000 records in te voegen. DUURDE LANG. na 30 kapte ie ermee en had hij pas 650 records ge-add! OK, hoe kan dat nu weer? WAAROM ZO TRAAG!? SNIK SNIK

Fatal error: Maximum execution time of 30 seconds exceeded in E:\Projects\test.php on line 24

mijn naam slaat nergens op, althans niet op mij :P


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Zoolander schreef op 23 november 2003 @ 21:16:
Hmm, probeerde even met een for-lus 1.000.000 records in te voegen. DUURDE LANG. na 30 kapte ie ermee en had hij pas 650 records ge-add! OK, hoe kan dat nu weer? WAAROM ZO TRAAG!? SNIK SNIK

Fatal error: Maximum execution time of 30 seconds exceeded in E:\Projects\test.php on line 24
Misschien beter om een .sql bestand te laten generen en dit in te laten voegen via een commandline tool?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
maar waarom na 30 seconden al een timeout? En waarom doet ie 30 seconden over 500 inserts? Dat is toch wel een beeeetje traag? Had wat meer van MySQL verwacht. (Draai het overigens wel op 900Mhz Athlon met 500MB)

mijn naam slaat nergens op, althans niet op mij :P


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

Zoolander schreef op 23 november 2003 @ 21:31:
maar waarom na 30 seconden al een timeout? En waarom doet ie 30 seconden over 500 inserts? Dat is toch wel een beeeetje traag? Had wat meer van MySQL verwacht. (Draai het overigens wel op 900Mhz Athlon met 500MB)
Dat kan alles met je tabeldefinitie te maken hebben. Post die eens hier (inclusief evt. indices).

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Dit is mijn code:

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
<?php

  // MySQL setup
  $host = "localhost";
  $user = "";
  $password = "";
  $table = "test";
  $database = "test";
  $connect = mysql_connect ($host, $user, $password);

  // PHP will parse queries to perform MySQL actions. 
  mysql_select_db ($database); 
  
  //$perform = mysql_query ("SELECT * from $table", $connect);
  
  // Connect to MySQL
  $connect;

  for ($i = 1; $i < 1000; $i++) {
  
      mysql_query ("INSERT INTO test values('snelheidinsec', 'mijnnaam', 'jouwnaam', '$i')");
      //$fetch = mysql_fetch_array ($perform);
      //print ("$fetch[3] $fetch[1] $fetch[2] $fetch[0] <br>");

      print "$i <br>";

  }

  // End of query, PHP will close connection.
  mysql_close ($connect);

?>


Ergens een fout?

[ Voor 42% gewijzigd door Zoolander op 23-11-2003 21:36 ]

mijn naam slaat nergens op, althans niet op mij :P


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Zoolander schreef op 23 november 2003 @ 21:31:
maar waarom na 30 seconden al een timeout? En waarom doet ie 30 seconden over 500 inserts? Dat is toch wel een beeeetje traag? Had wat meer van MySQL verwacht. (Draai het overigens wel op 900Mhz Athlon met 500MB)
Kan aan van alles liggen; kan ook zijn dat PHP het niet leuk vindt, random records genereren zwaar is, etc.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
En via mijn code? Zie je dan wat verkeerds?

mijn naam slaat nergens op, althans niet op mij :P


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

Zoolander schreef op 23 november 2003 @ 21:34:
Dit is mijn code:
<snip code>
Ergens een fout?
Ennuh, primary key en indices? Waar zitten die op? Of heb je die helemaal niet?

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Ze zijn allemaal pri-key en ook allemaal een index/ indices.
Trouwens,

Over een for-lus waarbij PHP int 1 t/m 1.000.000 moet printen onder elkaar

1
2
3
4
5
etc.

doet ie 3.5 minuut. Is dat ook wel normaal?

Ohw, en 500.000 records = helft heeft ie maar 40 seconden voor nodig. en
100.000 records maar 5. Hoe kan dat? Intern geheugen ofzo?

[ Voor 81% gewijzigd door Zoolander op 23-11-2003 21:54 ]

mijn naam slaat nergens op, althans niet op mij :P


  • ixi
  • Registratie: December 2001
  • Laatst online: 04-08 21:43

ixi

Zoolander schreef op 23 november 2003 @ 21:43:
Ze zijn allemaal pri-key en ook allemaal een index/ indices.
Trouwens,

Over een for-lus waarbij PHP int 1 t/m 1.000.000 moet printen onder elkaar
doet ie 3.5 minuut. Is dat ook wel normaal?
1 t/m 1.000.000 echo'en = ruim 10 MB aan karakters (incl de enters). Wellicht dat PHP moeite heeft met zoveel echo's, of dat je een trage verbinding met de server hebt. [edit: ik zie dat je print gebruikt, volgens mij werkt print sowieso trager dan echo, dus kan je beter echo gebruiken :)]

Is elk veld een primarykey, en heeft elk veld een index? Lijkt me niet echt een slim plan :) Is volgens mij ook niet mogelijk met het php script van je hierboven. Elk veld zou dan immers uniek moeten zijn, toch?

Die 30 seconde timeout is in te stellen in php.ini geloof ik. Zet deze op 0 voor oneindig. Is verder makkelijk op de php site te vinden.

[ Voor 29% gewijzigd door ixi op 24-11-2003 03:11 ]


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Is een samengestelde sleutel van 4 keys. Maar dat maakt niet uit. Ik zie op het net benchmarks van lui die 150.000 records updaten in 4 seconden. Waarom doet ie van mij er maar 600 in 30?

Waar ik op zoek naar ben: Hoe werkt een databasequerie, welke criterea spelen er mee bij de speed van een query? En hoe leer ik in te schatten wanneer een query snel of niet is?

Een boek zou helpen!

Er zijn volgens mij maar weinig mensen die dit weten of niet?

mijn naam slaat nergens op, althans niet op mij :P


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Is de manual niks?

  • whoami
  • Registratie: December 2000
  • Nu online
Zoolander schreef op 24 november 2003 @ 10:42:
Is een samengestelde sleutel van 4 keys. Maar dat maakt niet uit. Ik zie op het net benchmarks van lui die 150.000 records updaten in 4 seconden. Waarom doet ie van mij er maar 600 in 30?
De manier (volgorde) waarop die samengestelde sleutel is gemaakt kan er wel mee te maken hebben.
Stel, je hebt deze samengestelde sleutel (let op de volgorde):
code:
1
naam / voornaam / postcode

Als je dan een select doet , met een filter op 'naam', dan kan die samengestelde sleutel gebruikt worden. Ook als je een filter doet op 'naam' en 'voornaam', dan kan die sleutel ook gebruikt worden.
Echter, als je slechts een filter doet op voornaam en postcode, kan die samengestelde sleutel niet gebruikt worden, omdat je niet selecteert op naam.

Als je dus filtert op een bepaald veld (en je hebt een samengestelde query), dan moet je dus ook filteren op alle velden die links van dat veld liggen in die composite key, anders wordt je index niet gebruikt.
Waar ik op zoek naar ben: Hoe werkt een databasequerie, welke criterea spelen er mee bij de speed van een query? En hoe leer ik in te schatten wanneer een query snel of niet is?
Je kan altijd eens het executieplan van je query bekijken, en kijken of de indexen wel gebruikt worden, waar de bottlenecks zitten en wat je er kunt aan doen om die bottlenecks te verhelpen (statistieken vernieuwen, indexen bijmaken, bestaande indexen anders creeëren, ....)
Je moet er ook voor zorgen dat je index 'uniek' genoeg is, anders gaat de optimizer die index gewoon buiten beschouwing laten bij het bepalen van het optimale execution - plan.
Stel bv dat je een tabel hebt met 10.000 records, en dat je een index op een bepaald veld legt. Stel dat de verschillende waarden van dat veld binnen die tabel enkel 'A', 'B' en 'C' zijn.
Dan heb je bv 5000 records waarvoor de waarde van dat veld 'A' is, 3000 records met de waarde 'B' voor dat veld en 2000 records die 'C' hebben.
Die index is dus niet uniek genoeg, en zal hoogstwaarschijnlijk niet gebruikt worden.

[ Voor 25% gewijzigd door whoami op 24-11-2003 11:16 ]

https://fgheysels.github.io/


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Ik ben er uit.
Het ligt aan mijn PC.
Op school konden er in 30 seconden 70.000 records worden geinsert en bij een select met 2 where statements droeg hij er zo 150.000 records naar voren in 30 sec. En dat uiteraard in PHP.
PRIMA! :*)

Nu, voor de lezers:
Laat je niet gek maken: MySQL trekt het wel!
Voor mensen die dit al wisten: nu weet ik het ook.

Dank voor alle reacties!

Nu nog tot de bodem uitzoeken hoe ze dat GOT forrum zo snel hebben gekregen dat die per seconde 200.000 records doorzoekt! :)

Groet

mijn naam slaat nergens op, althans niet op mij :P


  • whoami
  • Registratie: December 2000
  • Nu online
Zoolander schreef op 24 november 2003 @ 15:55:
Ik ben er uit.
Het ligt aan mijn PC.
Op school konden er in 30 seconden 70.000 records worden geinsert en bij een select met 2 where statements droeg hij er zo 150.000 records naar voren in 30 sec. En dat uiteraard in PHP.
Niet noodzakelijk. Misschien kan je je query wel zodanig optimalizeren dat ie er bij jou op school slechts 5 seconden overdoet.
Een snellere PC gebruiken is niet altijd een oplossing voor het probleem, eerder een verdoezeling van het probleem.

https://fgheysels.github.io/


  • snoopy
  • Registratie: December 2000
  • Laatst online: 16-08 21:26
Zoolander schreef op 24 november 2003 @ 15:55:
...

Nu nog tot de bodem uitzoeken hoe ze dat GOT forrum zo snel hebben gekregen dat die per seconde 200.000 records doorzoekt! :)
De zoekmachine van GoT (omega/xapian) werkt niet met een MySQL database, deze werkt uberhaupt niet met sql. Voor meer informatie hierover: Omega search manual
Pagina: 1