php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.09.2009, 12:49  
Erfahrener Benutzer
 
Benutzerbild von Dragonfly
 
Registriert seit: 16.09.2008
Beiträge: 109
Dragonfly befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Ab wann lohnt sich eigene Datenbank

Hallo ich arbeite gerade mit Mysql und frage mich ab wann es sich zeitlich eigendlich rechnet anstelle einer eigenen Zeile in einer großen Tabelle eine eigene Tabelle anzulegen.

Folgendes um sich das ganze einfacher vorstellen zu können. Angenommen ich habe eine Webseite mit 1Million Usern, jeder dieser User hat in einer Tabelle seine Email-Adresse und noch ein paar Daten gespeichert. Sollen nun Daten für den User blablabla aufgerufen werden muss natürlich ersteinmal die halbe Datenbank durchgescannt werden bis der Name gefunden wird. Hätte ich für jeden User eine eigene kleine Datenbank (also 1Millionen Datenbanken) dürfte das schneller gehen, allerdings hätte ich dann auch 1Millionen Dateien am Hals und Verknüpfungen zwischen den Usern wären schwerer umzusetzen.

Muss ich soetwas bei der Datenbankprogrammierung beachten, gibt es da eine magische Grenze (z.B. ab 10.000 Zeilen macht es sich zeitlich bemerkbar) oder ist das ganze ,,scheissegal" und die Server sind mittlerweile so schnell das zwischen 10Einträgen und 10Millionen kaum ein zeitlicher Unterschied besteht ?
__________________
Das Unverständlichste am Universum ist im Grunde, dass wir es verstehen können.
Albert Einstein
Dragonfly ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.09.2009, 14:17  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.723
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Datenbanken durchsuchen die Einträge in der Regel nicht linear, sondern über eine Indexstruktur in Form eines Baums. Um einen Eindruck zu vermitteln, wie effizient das sein kann:

Hinweis: Das ist nur ein Gedankenspiel. Für realistischere Erklärungen (z. B. hinsichtlich der Vorsortierung) siehe Wikipedia (etwa B-Baum). Die Größenordnung sollte aber ungefähr passen.

Stell dir vor, du hast eine Datenmenge von 3000 Namen und willst ermitteln, ob der Name "Stefan" darin auftaucht. Bei linearer Suche braucht das im Schnitt -- vereinfacht gesagt -- 1500 Vergleiche. Sortierst du die Einträge jedoch vor der Suche alphabetisch und erzeugst dir einen kleinen Hilfsindex, in dem gespeichert ist, bei welcher Eintragsnummer der Bereich jedes Buchstaben beginnt (zum Beispiel "S ab Eintrag 2741"), kannst du folgendes machen:

- Durchsuche den Hilfsindex, bis der Buchstabe erreicht ist, der dem Anfangsbuchstaben von Stefan entspricht (19 Schritte, weil S der 19. Buchstabe ist).

- Durchsuche die sortierte Liste ab der dort angegeben Eintragsnummer (2741) weiter nach Stefan. (Sagen wir, es gibt 126 Einträge mit "S", "Stefan" ist davon Nummer 102. Macht also 102 Schritte.)

Das ergibt in der Summe nur noch 121 Schritte, was weniger als ein Zehntel der bei linearer Suche angenommenen 1500 Schritte ist.

Das Prinzip lässt sich beliebig fortführen. Zu jedem Buchstabenbereich könnte ein weiterer Hilfsindex angelegt werden, der den Eintrag markiert, bei dem der zweite Buchstabe beginnt. Ist Stefan der 3. Name, der mit "St" beginnt, wären es nur noch 19+20+3 = 42 Schritte.

Enthält die Liste nun nicht 3000 Namen, sondern meinetwegen 30 Millionen, dann könnte "Stefan" der 173. Name sein, der mit "Stef" beginnt:

19+20+5+6+173 = 223 Schritte (statt 15 Millionen).

Ungefähr so schnell sind Datenbanken bei der Suche in indizierten Feldern. (Und aus diesem Grund sollte in jedem WHERE-Teil einer häufig ausgeführten Query eine indizierte Spalte enthalten sein.)

Geändert von mermshaus (20.09.2009 um 14:20 Uhr).
mermshaus ist offline   Mit Zitat antworten
Alt 20.09.2009, 14:48  
Erfahrener Benutzer
 
Benutzerbild von Dragonfly
 
Registriert seit: 16.09.2008
Beiträge: 109
Dragonfly befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für deine Erklärung, so habe ich es wirklich verstanden. Im Prinzip wie ein Wörterbuch wo ich auch nicht alle 3000 Seiten durchblättere wenn ich ein bestimmtes Wort suche

Du hast mir echt geholfen, werde das jetzt versuchen so in meine Datenbankstruktur einzubauen.
__________________
Das Unverständlichste am Universum ist im Grunde, dass wir es verstehen können.
Albert Einstein
Dragonfly ist offline   Mit Zitat antworten
Alt 20.09.2009, 18:24  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Ich habe hier eine Tabelle mit 15 Millionen Zeilen. Der Suchbegriff hat einen eigenen Index. Die Suche nach einem bestimmten Eintrag dauert ca. 0,2 Sec.

Du solltest dich, bevor du dich mit dem Thema Performance auseinandersetzt zuerst mal mit den Grundlagen vertraut machen. Was du da mit Datenbank bezeichnest, das sind Tabellen. Zugleich schau dir mal an, was 'Normalformen' sind - dann vestehst du schon einen sehr großen Teil.
Wolla ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hilfe: datenbank mappen und kopieren M*I*B Datenbanken 29 15.02.2012 21:55
Datenbank austauschbar machen durch Trennung von konkreter Implementierung Asipak PHP-Fortgeschrittene 10 04.09.2009 00:11
[Erledigt] Im- / Export einer MySQL Datenbank amaier161 Datenbanken 5 19.07.2009 00:42
Direkten Zugriff auf Datenbank verhindern heyho PHP Tipps 2008 7 07.02.2008 11:41
Probleme beim Datenupload zu meiner Datenbank Datenbanken 3 05.09.2005 19:47
Mehrere Anwendungen eine Datenbank... Datenbanken 5 15.08.2005 11:22
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? PHP Tipps 2005-2 0 05.08.2005 19:33
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:32
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:29
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:29
Auslesen aus der Datenbank nixdorf PHP Tipps 2005 7 06.02.2005 21:40
INSERT in die Datenbank PHP Tipps 2004-2 4 13.12.2004 19:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
ab wann lohnt sich eine datenbank, ab wann lohnt sich mysql, wann lohnt sich eine datenbank, lohnt sich php, wörterbuch eigene datenbank, php eigene datenbank, jeder benutzer eigene datenbank, datenbank ab wann, ab wann lohnt sich datenbank, php datenbank eigene suche, ab wievielen daten lohnt sich eine datenbank, lohnt sich datenbank, kleine eigene datenbank, wann lohnen sich datenbanken, ab wann lohnt sich eine datenbankanwendung, lohnt es sich auf datenbank, php ab wann benutzer eigene datenbanken, wann lohnt sich eine wissensdatenbank, eigenen datenbankserver php, ab wann rentiert sich datenbank

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum