2016-06-10 7 views
0

Ich mache eine Website, die Posts und Antworten System haben.Benachrichtigung und PHP + MySQL Design

Ich möchte tun, wenn jemand antwortet, Benachrichtigung an diejenigen, die jemals geantwortet haben (oder beteiligt) die Post.

Mein Gedanke ist, eine Tabelle erstellen namens Notification enthält message und seen (gesehen/ungelesen) Feld. Sobald die Leute geantwortet haben, setzen Sie den Eintrag in die Tabelle Notification.

Es scheint einfach und intuitiv, aber wenn es viele Leute gibt, in die zum Beispiel der 31. Benutzer antwortet, erhalten 30 Leute, die jemals geantwortet haben, Benachrichtigung. Dadurch werden 30 Zeilen mit SQL-Datensätzen erstellt. Und der 32. Benutzer wird 31 Datensätze erstellen. Die Gesamtzahl der Zeilen wird dann 30+31=61.

Meine Frage ist

  1. Ist das ein guter Weg, Benachrichtigungssystem zu handhaben?
  2. Wenn ja, wie man mit der doppelten Benachrichtigung umgehen (habe nicht gesehen, aber hat neue Antwort)
  3. Wie oben, wird dies eine riesige Serverlast machen?

Vielen Dank.

Antwort

1

Ich schuf ähnliches System. Hier ist meine Erfahrung:

  1. Meine Benachrichtigungstabelle sieht wie folgt aus: ID (int) | user_id (int) | post_id (int) | last_visited (DatumZeit)

  2. User_id + post_id ist ein uniquecomposite index.

  3. Wenn also ein Benutzer die Seite öffnet, suche ich nach einem Eintrag (user_id + post_id) in der Datenbank. Wenn ich es finde, aktualisiere ich das Feld last_visited, wenn ich nicht finde, und erstelle dann eine neue Zeile.

  4. Wenn ich Listennachrichten für die Benachrichtigung brauche ich nur alle Nachrichten abfragen, die nach last_visited Zeit erstellt wurde.

  5. Auch ich habe cron sript, die Benachrichtigung für geschlossene Posts oder gesperrte Benutzer zu säubern.

Was Ihre Fragen:

1 und 2: Sie haben ein ausgewogenes Verhältnis zwischen der Menge an Daten zu finden, die gespeichert werden und die Leistung der Website. Wenn Sie nicht alle diese Daten speichern müssen, können Sie meinem Weg folgen. Wenn diese Daten benötigt werden, ist Ihr Weg besser.

3: Es hängt von der Anzahl der Besucher und anderen Funktionen ab. Aber hier sind einige Ratschläge. Sie müssen Indizes für MySql-Tabelle für bessere Leistung verwenden. Auch sollten Sie über Cron-Skript nachdenken, das nutzlose Benachrichtigungen entfernt. Wenn Sie eine riesige Menge von Besuchern mehr als 700k pro Tag haben, sollten Sie über MogoDb oder andere leistungsstarke noSql Datenbank nachdenken.

+0

Ich löste mein Problem auf Ihre Weise. Danke für deine großartige Idee. :) – Benyi