Hello,
Die Frage ist: Wie speichere ist das am besten und efizientesten in einer Datenbank? Eine große 3-spaltige Tabelle, in die ich alle Nachrichten aller Benutzer reinschreibe (empfaengername, absender, text)? Die Nachrichten eines bestimmten Benutzers müsste ich dann bei jedem Zugriff über "SELECT text, absender WHERE empfaenger=einuser" raussuchen. Ist das halbwegs effizient oder gibt es eine bessere Möglichkeit?
Man sollte den Namen des Empfängers vom OWNER des Datensatzes trennen. Gibt es denn vielleicht auch eine Dialog-Funktion, mit der festestellt wird, welche Kommunikation zwei Teilnehmer untereinander betrieben haben?
ID_msg bigint unsigned primary ID der Message
ID_OWNER bigint unsigned
ID_SENDER bigint unsigned
MSG_DATE datetime
MSG_SUBJ char(40)
MSG_TEXT text Text der Meldung
MSG_READ tiny int Die Meldung ist schon geöffnet worden
MSG_REPLY tiny int Die Meldung wurde schon bearbeitet
MSG_DEL tiny int Delete-Flag um nicht bei jeder Löschung tatsächlich
löschen zu müssen. Da stirbt die Performance
MSG_OP_FLAG tiny int Merker für den Operator, wenn Meldungen z.B. ausgeblendet
werden müssen aber nicht gelöscht werden dürfen
Das gibt geschäftze ca. 1.300 Bytes pro Datensatz
Das macht bei 100 Meldungen pro User, und 20.000 Usern ca. 2.6 GB
Damit ist MySQL 3.x für Deinen Anwendungsfall ungeeignet. Die Spezifikation von
4.x kenn ich noch nicht auswendig.
Da wirst Du wohl entweder ein intelligenteres Flat-File Komzept bauen müssen, oder gleich auf z.B. Informix gehen müssen. Denn bei einem DBMS gleich in die Begrenzug zu fahen, ist ja nicht sehr sinnvoll.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau