Um etwas Kontext zu schaffen, arbeite ich an einer Echtzeit-Chat-Anwendung mit Pusher (Websocket Service über Cloud), wo jede Nachricht in meinem Server angemeldet ist, bevor es auf den Websocket-Server geschoben wird, der die Daten an den Client schiebt .So verwende ich ein MySQL zum Speichern der Nachrichten.Datenbank Denormalisierung?
Also eine solche Tabelle ist meine Nachrichten, die die folgenden Felder id,chat_payload,message_time,user_id,room_id
hat.
Für die anfängliche Chatroom bevöl ich müsste die Nachricht Geschichte abzurufen, wobei jedes Objekt Nachricht die username,useravatar,chat_payload,timestamp
.Aber der useravatar,username
umfassen würde, wird in users, user_meta
Tabellen gespeichert respectively.So die Daten auf der Flucht zu holen scheint mit Joins deutlich teuer, da user_meta
Tabelle wächst sehr fast .Und klar Speichern Benutzernamen, useravatar in messages
Tabelle scheint nicht richtig, da es würde Probleme mit der Aktualisierung.
Also unter Berücksichtigung des oben genannten Szenarios könnte jemand bitte eine entsprechende DB/Application Design für die gleichen vorschlagen?
* Ganz ehrlich, Freund ... * "Die Kräfte von MySQL werden Sie verblüffen." Das Richtige, hier, IMHO, * ist * "nur die ID zu speichern", genau wie es die Normalform-Richtlinien empfehlen. –
Varun diese Frage ist ziemlich schlecht, du musst das wissen, oder? – Drew
Dies ist zu vage und zu allgemein. Verwenden Sie DDL, um ein Schema zu beschreiben, das Kandidatenschlüssel, Fremdschlüssel und die wichtigsten Aspekte Ihrer Verwendung und Architektur enthält, die für die Optimierung relevant sind. Wie es jetzt ist, fragt Ihre Frage im Wesentlichen nach einer Einführung in die Datenbankoptimierung. Bitte reduzieren Sie den Umfang auf einen bestimmten Design-Kompromiss. – philipxy