2016-04-16 14 views
0

Ich arbeite gerade an einem Gruppenchat Entwickelt speziell für die Zusammenarbeit von Entwicklern. Ich übertrage gerade das System von nur einer Lobby (Chat-Raum), um jedem Benutzer zu erlauben, ihre eigene einzigartige Lobby (mit einer Lobby-ID) zu haben.Wie organisiere ich meine Datenbank am besten?

ich jedem Benutzer die Lobby-ID zuweisen, so dass, wenn sie sich anmelden die richtigen Nachrichten laden. Um die richtigen Nachrichten für eine bestimmte Lobby anzuzeigen, weise ich in der Datenbank jeder Nachricht die eindeutige Lobby-ID zu. Dies habe ich derzeit umgesetzt.

Allerdings habe ich mich gefragt, ob es eine gute Idee sein würde jeder Lobby seinen eigenen Tisch zu geben, in seine Botschaften zu setzen.

Auf diese Weise eines Tages statt 200.000 Nachrichten in einer Tabelle zu haben, könnten sie sein verteilt zwischen vielen Tabellen und verringert somit die Abfragezeiten.

Vorschläge?

+2

Nein, tu das nicht. Generiere keine Tabellen abhängig vom Inhalt. –

+0

können Sie zwei Tabellen für inaktive Lobby und eine für aktive Lobbys haben. Wenn eine Lobby geschlossen ist, werden ihre Nachrichten in die inaktive Lobbys-Nachricht übertragen. Auf diese Weise können Sie Ihren Tisch so klein wie möglich halten. – Mahmoud

+0

Wie der andere sagte: Tu das nicht. Ihre DB wird nach ein paar Monaten ein Durcheinander sein und Sie werden sicher zu Ihrem Ein-Tisch zurückrollen. [Key Partionning] (http://dev.mysql.com/doc/refman/5.1/de/partitioning-key.html) ist wahrscheinlich ein Track, um zu untersuchen, ob Performance deine Hauptsorge ist. Der Schlüssel sollte natürlich Ihr Chat room_id sein und Ihre Anfragen in einem bestimmten Chat-Raum werden (fast) so ausgeführt, als wären sie in einer separaten Tabelle. –

Antwort

0

Nun, eine einzigartige Tabelle für jeden Chat Room klingt wie eine ziemlich schlechte Idee. Es hört sich an, als ob es Ihnen bessere Leistung geben wird, und es könnte sein. ABER, es macht Wartung und zukünftige Änderungen schwieriger, macht Ihre DB ein großes Durcheinander, und schließlich, wird Ihnen keinen Nutzen geben, der sonst nicht gewonnen werden kann.

Sie sollten einen Tisch für alle Chat-Nachrichten machen, mit einem „ChatID“/„LobbyID“ Spalte, die die Verbindung zwischen der Meldung und dem entsprechenden Chat-Raum macht.

Dann sollten Sie sekundären Index für diese Spalte erstellen, oder sogar als Partitionierungsschlüssel verwenden. Auf diese Weise können Sie eine gute Leistung erzielen, aber ohne ein Chaos an Tischen.

Hoffe, das hilft.

Verwandte Themen