MySQL Zeilengröße auf Zeilenebene korrekt berechnen
HerrJo
- datenbank
0 Bio0 Rambo0 Vinzenz Mai0 Rambo I
Hallo Leute,
ich habe einen Mitgliedsbereich bei dem sich Leute Profil-Seiten erstellen können (auch mehrere). Damit ich nun weiß welcher Nutzer wie viel Speicherplatz belegt hat, möchte ich gerne an hand der Tabelle zählen wie viel "Daten" in Bytes in der Tabelle auf Nutzerebene vorhanden sind. Unter Anderem gibt es eine Tabelle die heißt pages
hier der aufbau:
page_id -> eindeutige seiten-id
user_id -> id des nutzers
page_title -> varchar (seiten-titel)
[....] -> diverse textfelder und varchars
dat_last_change -> datum als unix-time-stamp
das [....] beschreibt nur, dass hier einige spalten sind, die ich der übersichthalber hier jetzt nicht anführe. Ich möchte so in der Art zählen (ich weizz der code ist shit, aber es sollte zeigen was ich meine):
SELECT user_id, sum(machbytes(vonallenspalten)) WHERE user_id='3' LIMIT 1
Die MySQL-Abfrage SHOW TABLE STATUS hat keinen Sinn, weil ich mehrere Seiten von verschiedenen Nutzern über diese Tabelle verwalte.
Danke für die Anregungen,
Greets
Jo
Sup!
Wäre sicher klüger gewesen, für jeden User eine eigene Tabelle anzulegen; so bleibt Dir nur, für jeden User alle gespeicherten Daten (rekursiv) zu erfassen und die Größen zu addieren.
Gruesse,
Bio
Yo!
Wäre sicher klüger gewesen, für jeden User eine eigene Tabelle anzulegen; so bleibt Dir nur, für jeden User alle gespeicherten Daten (rekursiv) zu erfassen und die Größen zu addieren.
Würde ich nicht unbedingt machen, viele Tabellen bringen Pech. Wie ist das eigentlich bei MySQL, ist es nicht so, dass für jeden Datensatz eine bestimmte Anzahl Bytes reserviert ist (8k)? Dann wäre doch nur zu prüfen wieviele Datensätze der Nutzer in der Tabelle 'Pages' angelegt hat und diese Anzahl mit dem o.g. festen Wert zu multiplizieren.
BTW - wie gehts, Bio? Man liest nicht mehr sooo viel von Dir...
Rambo I
Hallo
Wie ist das eigentlich bei MySQL, ist es nicht so, dass für jeden Datensatz eine bestimmte Anzahl Bytes reserviert ist (8k)?
Nein, es ist nicht so, siehe z.B. Handbuch
Freundliche Grüße
Vinzenz
Hi Vinzenz,
Wie ist das eigentlich bei MySQL, ist es nicht so, dass für jeden Datensatz eine bestimmte Anzahl Bytes reserviert ist (8k)?
Nein, es ist nicht so, siehe z.B. Handbuch
bei MSSQL Server gibts diese Beschraenkung der Datensatzlaenge von 8kb, wenn man auf BLOBs verzichtet, was man "an und fuer sich" auch tun sollte (zumindest bei MSSQL Server ;-).
MySQL arbeitet anscheinend mit verschiedenen so genannten storage engines, die Beschraenkungen der Datensatzlaenge kennen oder eben nicht kennen. Ein Beispiel fuer ein Kennen: http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html
RDBMSe arbeiten intern typischerweise mit Bloecken bzw. "Seiten", deren Verwendung performancebedingt ist. Eine variable Datensatzlaenge beisst sich tendenziell mit diesem Konzept.
Rambo I