Datenbankgröße
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfrage
datenbank
einwirkung
file
gesamte tabelle
hoher besucherzahlen
laden
lange warten
level
problem
quelle
sache
senden
speichern
tabelle
tun
unterschied
warten
zeile
zugriff
-
hey würde mal gerne wissen wie viel speicherplatz eine datenbank eig hat. weil wenn in einem gästebuch hunderte einträge stehen dann häuft sich doch bestimtt was an oder?
Beitrag zuletzt geändert: 28.2.2010 14:35:17 von maxdes -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das ist nur durch den Festplattenspeicher des Servers begrenzt.
Also nahezu unendlich.
LG cookies -
Desto mehr Speicher in deiner Datenbank genutzt wird desto langsamer wird auch deine Website
-
demonic-legends schrieb:
Desto mehr Speicher in deiner Datenbank genutzt wird desto langsamer wird auch deine Website
...wie verhält es sich, wenn man mehrere datenbanken nutzt?
z.b. wenn ich 3 datenbanken verwende, anstatt den gleichen inhalt in einer datenbank zu speichern...
-> gibt es dann noch einen unterschied, wenn:
--->mehrere sachen "gleichzeitig" (ob wegen hoher besucherzahlen oder wegen aufwendigen scripts) gleichzeitig abgefragt werden -
ktmmonster schrieb:
demonic-legends schrieb:
Desto mehr Speicher in deiner Datenbank genutzt wird desto langsamer wird auch deine Website
...wie verhält es sich, wenn man mehrere datenbanken nutzt?
z.b. wenn ich 3 datenbanken verwende, anstatt den gleichen inhalt in einer datenbank zu speichern...
-> gibt es dann noch einen unterschied, wenn:
--->mehrere sachen "gleichzeitig" (ob wegen hoher besucherzahlen oder wegen aufwendigen scripts) gleichzeitig abgefragt werden
Ich denke solange die 3 Datenbanken nicht auf unterschiedlichen Servern liegen wirst du dabei keinerlei Unterschied feststellen. -
Ja, gleichzeitig hat eine Einwirkung.
Das hat mit dem Table-Locking zu tun.
Wenn du MyISAM als MySQL-DatenbankEngine benutzt, erfolgt Table-Level-Locking. Das heißt bei einem Zugriff auf die Tabelle wird diese gesperrt und alle anderen müssen warten. Wenn du hingegen InnoDB als Engine nutzt, hast du Row-Level-Locking, d.h. nur die Zeile auf die du zugreifst wird gesperrt ;) -
nikic schrieb:
Wenn du MyISAM als MySQL-DatenbankEngine benutzt, erfolgt Table-Level-Locking.
ktmmonster schrieb:
gleichzeitig abgefragt werden
Wieso sollten bei Abfragen (SELECT's) ein Table-Level-Locking den Zugriff stören?
Hast du dazu Quellen? -
nikic schrieb:
Ja, gleichzeitig hat eine Einwirkung.
Das hat mit dem Table-Locking zu tun.
Wenn du MyISAM als MySQL-DatenbankEngine benutzt, erfolgt Table-Level-Locking. Das heißt bei einem Zugriff auf die Tabelle wird diese gesperrt und alle anderen müssen warten. Wenn du hingegen InnoDB als Engine nutzt, hast du Row-Level-Locking, d.h. nur die Zeile auf die du zugreifst wird gesperrt ;)
ok...
kann man denn festlegen, welche engine man hat? oder is des (wie ich vermute) anbieter-abhängig?
- welche engine hat denn lima? ;)
...und wenn ich dich bei dem mit "MyISAM" richtig verstanden hab, dann wird beim zugriff auf die tabelle "beispiel1" aus der datenbank "beiSPIELBANK" verhindert, dass php etc. auf die tabelle "beispiel2" aus der datenbank "beiSPIELBANK" zugreifen kann.
bevor es also etwas aus "beispiel2" laden kann, muss das script so lange warten, bis der zugriff auf "beispiel1" beendet ist.
bei InnoDB kann man aber ein script gleichzeitig bei den tabellen "beispiel1" und "beispiel2" etwas laden lassen, nur innerhalb der tabellen werden die z.z. verwendeten zeilen gesperrt, was zu höherer geschwindigkeit führen sollte (solange das script nicht auf die gleiche zeile in der gleichen tabelle zugreift, um unterschiedliche sachen zu laden).
problem:
was hat des mit der verwendung von 2 datenbanken zu tun? (z.b. "beiSPIELBANK" und "nachSPIELBANK")
gegenseitig sperren sich die datenbanken dann ja nicht wenn auf eine zugegriffen wird.
-> check ich grad nich^^
pascal-hp schrieb:
Also ich würde einfach sagen: GENUG
ahja... sehr informativer text, danke für deinen beitrag -
Hmm... das wäre mir auch neu, das eine reine SELECT-Abfrage das diese Zeile dann für andere gesperrt wird.
Sollte dies wirklich der Fall sein, dann hab ich mal wieder was neues dazu gelernt.
Aber zum Thema mehrere Datenbanken: Ich würde mal behaupten, je mehr Datenbanken man für eine Sache nutzt, desto mehr leidet die Performance darunter, denn die kommunikation zwichen den einzelnen Datenbanken ist auch zu beachten. Ob man dies aber wirklich spürt bezweifle ich.
MfG -
ktmmonster schrieb:
ok...
kann man denn festlegen, welche engine man hat? oder is des (wie ich vermute) anbieter-abhängig?
- welche engine hat denn lima? ;)
Nein, das legst du beim Erstellen der Tabelle fest. Da kannst du dann MyISAM und InnoDB wählen, sowie einige andere (Lima hat nicht alle, die beiden gibts aber) InnoDB hat übrigens auch Transaktionen, falls du noch ein Argument für diese Engine brauchst ;)
...und wenn ich dich bei dem mit "MyISAM" richtig verstanden hab, dann wird beim zugriff auf die tabelle "beispiel1" aus der datenbank "beiSPIELBANK" verhindert, dass php etc. auf die tabelle "beispiel2" aus der datenbank "beiSPIELBANK" zugreifen kann.
bevor es also etwas aus "beispiel2" laden kann, muss das script so lange warten, bis der zugriff auf "beispiel1" beendet ist.
Nein, du kannst auf beispiel1 und beispiel2 gleichzeitig zugreifen. Aber du kannst keine zwei Anfragen an beispiel1 senden. Also doch, du sendest zwei Anfragen, aber zuerst wird die gesamte Tabelle "gelockt", die erste Anfrage durchgeführt, die zweite muss warten, dann wird die Tabelle unlocked, wieder gelockt, die zweite Anfrage wird ausgeführt und die Tabelle wird unlocked ;)
Bei InnoDB kannst du hingegen ruhig hundert Anfragen an die gleiche Tabelle senden, weil immer nur eine Zeile gelockt wird. (Wenn natürlich zwei Anfragen die selbe Zeile anfragen, muss eine warten.)
problem:
was hat des mit der verwendung von 2 datenbanken zu tun? (z.b. "beiSPIELBANK" und "nachSPIELBANK")
gegenseitig sperren sich die datenbanken dann ja nicht wenn auf eine zugegriffen wird.
Gar nichts :D Wir sind etwas vom Thema abgewichen ;)
Hmm... das wäre mir auch neu, das eine reine SELECT-Abfrage das diese Zeile dann für andere gesperrt wird.
Sollte dies wirklich der Fall sein, dann hab ich mal wieder was neues dazu gelernt.
Jop, genau so ist es. Und das auch nur bei InnoDB. Bei MyISAM ist es noch deutlich schlimmer, weil die gesamte Tabelle gesperrt wird ;) -
achso, jetz hab ichs verstanden nikic
jetz bleibt aber noch die frage, wie des is wenn ich anstatt
->1ner db mit 3 tabellen
(aufm gleichen webspace)
--> 3 DBs mit jeweils 1ner tabelle hab und meine scripts sich informationen aus verschiedenen tabellen holen sollen/wollen/müssen -
nikic schrieb:
Jop, genau so ist es. Und das auch nur bei InnoDB. Bei MyISAM ist es noch deutlich schlimmer, weil die gesamte Tabelle gesperrt wird ;)
Also soweit ich das aus der MySQL-Doku verstehe wird Table-Level-Locking nur bei INSERT's (die nicht am Ende angefügt werden) durchgeführt.
The MyISAM storage engine supports concurrent inserts to reduce contention between readers and writers for a given table: If a MyISAM table has no free blocks in the middle of the data file, rows are always inserted at the end of the data file. In this case, you can freely mix concurrent INSERT and SELECT statements for a MyISAM table without locks. That is, you can insert rows into a MyISAM table at the same time other clients are reading from it.
Quelle: http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html
Ich denke auch nicht das sich beim verteilen auf mehrere Datenbanken wirkliche Performance-Unterschiede feststellen lassen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage