Soll ich eine separate Tabelle Online-Nutzer zu speichern, oder soll ich nur zusätzliche Felder in der vorhandenen Mitgliedern Tabelle verwenden?

StackOverflow https://stackoverflow.com/questions/1445617

  •  22-07-2019
  •  | 
  •  

Frage

Ich arbeite an einem Online-System der Benutzer sozial und natürlich interagieren können wird es wichtig sein, um Benutzer zu identifizieren, die online in der Tat sind. Ich weiß, über HTTP staatenlos und ich weiß, über Sitzungen mit, so dass ich dies zu erreichen, müssen durch die letzte aktive Zeit eines Benutzers zu einer beliebigen Ablaufzeit zu vergleichen.

Meine letzte Frage kommt unten zu diesem: Soll ich nur hinzufügen, einige Felder auf den bestehenden Mitglieder Tisch (last_active_time, is_user_online, hide_online_status, etc) OR wäre es am besten, diese Informationen in einer separaten Tabelle zu halten Mein erster Gedanke ist es, die vorhandene Tabelle der Einfachheit halber zu verwenden. Abgesehen für Maß an Komplexität, was sind die Vorteile / Nachteile eines gegen die anderen?

War es hilfreich?

Lösung

Ich würde behaupten, dies innerhalb einer separaten Tabelle. Wenn Sie eine Million Benutzer haben und Sie wollen wissen, wer online ist, wollen Sie nicht, dass die Tabelle immer und immer wieder gescannt werden, dass die Informationen zu finden. Ihre „online“ Tabelle wird relativ klein und man kann einen Job hat, dass es für diejenigen, in regelmäßigen Abständen überprüft, die nicht in den letzten 5 Minuten kommen in haben oder so und dann einfach aus der Online-Tabelle löschen und alles aktualisiert notwendig in der Mitgliedertabelle für "last_seen"

Andere Tipps

Erstellen

eine neue Tabelle.

Zunächst gibt es die philosophische Vernunft, die, dass ein Objekt ist (sprich: Tabelle) sollte einen Zweck hat. Das wird eine Menge in der Datenbank logisches Design verwischt, aber es ist ein gutes Prinzip dennoch.

Aber die wirklichen Gründe sind aus physikalischem Design: Erstens, die Zahl der Nutzer, die weit zu einem bestimmten Zeitpunkt angemeldet werden weniger als die Gesamtzahl der Benutzer angenommen werden kann, so dass die Speicheranforderungen niedriger sein wird. Und niedrigere Speicher mich direkt in reduzierter Last auf der Datenbank, nur weil Sie wenige Blöcke zu lesen und zu aktualisieren.

Wenn Sie diese Daten in der Haupttabelle setzen darüber hinaus als diese Blöcke werden über einen viel breiteren Raum zerstreut werden, und die Inhalte der Blöcke wird kontinuierlich wachsen und schrumpfen, wie Sie die Daten ändern.

Und schließlich werden Sie wahrscheinlich einige Indizes erfordern, zum Beispiel zu sehen, wer gerade online ist. Und diese Indizes (1) nehmen noch mehr Platz, (2) schaffen noch mehr verstreute schmutzige Blöcke, die physisch auf die Platte geschrieben werden müssen, und (3) einführen einen Punkt Update Anstoßes.

Ich denke, es hängt davon ab, wie viele Benutzer, die Sie erwarten. Wenn es nur ein paar tausend Nutzer gehen sein, würde ich nur das Online-Status machen ein Attribut eines Benutzers in der Benutzertabelle. Wenn da sein mehr als das sind, dann werden Sie eine online_users Tabelle, wollen und diese Informationen dort halten, mit einem Fremdschlüssel für die Hauptnutzer Tabelle. Um die Vorteile (erwähnt von oben Plakate) ernten, sollten Sie eine Aufgabe, alle paar Stunden laufen oder so, um inaktive Benutzer aus der online_users Tabelle zu entfernen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top