Facebook mag Benachrichtigungen verfolgen (DB Design)
Ich versuche nur, um herauszufinden, wie Facebook die Datenbank strukturiert ist, für die Verfolgung von Benachrichtigungen.
Ich gehe nicht viel in der Komplexität wie Facebook ist. Wenn wir uns vorstellen, eine einfache Tabellenstruktur für notificaitons:
notifications (id, userid, update, time);
Können wir die Benachrichtigungen von Freunden mit:
SELECT `userid`, `update`, `time`
FROM `notifications`
WHERE `userid` IN
(... query for getting friends...)
Allerdings, was sollte die Struktur der Tabelle prüfen, sich die Benachrichtigungen, die gelesen wurden und welche noch nicht?
InformationsquelleAutor der Frage Atif Mohammed Ameenuddin | 2009-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, ob dies der beste Weg, dies zu tun, aber da habe ich keine Ideen von jemand anderem, das ist, was ich tun würde. Ich hoffe, dass diese Antwort vielleicht anderen helfen.
Wir haben 2 Tabellen
Die Idee ist, wählen Sie Benachrichtigungen aus Benachrichtigungen-Tabelle und die join notificationsRead Tabelle und überprüfen Sie die Letzte Benachrichtigung Lesen und die Zeilen mit ID > notificationid. Und jedes mal, wenn die Seite Benachrichtigungen ist geöffnet, aktualisieren Sie die Zeile aus notificationsRead Tabelle.
Die Abfrage für ungelesene Benachrichtigungen, die ich denke, wäre wie diese..
Die obige Abfrage wird nicht geprüft.
Dank der Idee von db design von @espais
InformationsquelleAutor der Antwort Atif Mohammed Ameenuddin
Könnte man hinzufügen, eine andere Tabelle...
Wenn Sie wollte eine Geschichte, die Sie halten konnte die X neuesten Meldungen und löschen Sie den rest, die sind älter als Eure Letzte Meldung in der Liste....
InformationsquelleAutor der Antwort espais
Wenn, wenn Sie Benachrichtigungen, die Sie geben, alle relevanten Meldungen zu diesem Zeitpunkt verfügbar sind, können Sie diese einfacher durch das anbringen von Zeitstempeln, um Meldepflichtige Ereignisse und behalten den überblick, Wann die einzelnen Benutzer zuletzt empfangenen Benachrichtigungen. Wenn Sie in einer multi-server-Umgebung, obwohl, müssen Sie vorsichtig sein, über die Synchronisation. Beachten Sie, dass dieser Ansatz nicht erforderlich ist true-Datum-Zeit-Stempel, etwas, steigt streng monoton.
InformationsquelleAutor der Antwort Joe Mabel
Sehe ich niemand hier bezieht sich auf die Tatsache, dass Benachrichtigungen sind in der Regel re-occurring, aka. die Meldung über eine bevorstehende Transaktion ist immer die gleiche, aber mit einer anderen Transaktion ID oder Datum. etwa so: { haben Sie eine neue Zahlung: @paymentID, mit einer Fälligkeit von @dueDate }.
Dass die Texte in einer anderen Tabelle kann auch helfen, mit
Somit habe ich auch eine Tabelle für diese abstrakten Meldungen ein, die Links unter dem der Benutzer mit einem mittleren Tisch, wo ein notification-Typ gesendet werden kann, um einem Benutzer zu mehreren Zeiten. Ich auch mit den Benachrichtigungen, die den Benutzer nicht durch eine foreign key-ID, allerdings habe ich ein notification-codes für alle Benachrichtigungen und full_text indiziert die varchar-Feld von diesen codes, die für schnellere lese-Geschwindigkeiten. Aufgrund der Tatsache, dass diese Benachrichtigungen gesendet werden müssen, zu bestimmten Zeiten, es ist auch einfacher für die Entwickler zu schreiben
Nun, da meine Nachrichten gehen, um benutzerdefinierte Daten in Sie eingefügt wird in die Zeichenfolge, die, wie Sie sehen können aus dem zweiten argument vorher, dann werde ich speichern Sie in einer Datenbank blob. als solche
Dies ist, weil ich will, um zu entkoppeln die Benachrichtigungen aus anderen Tabellen und als solche möchte ich nicht nach Kreta unnötigen Daten FK-Beziehungen von und zu den Benachrichtigungen die Tabelle, so kann ich zum Beispiel sagen Benachrichtigung 234 befestigt ist, um die Transaktion 23 und dann kommen Sie und Holen Sie, dass die transaction-ID. Die Entkopplung nimmt der Aufwand für die Verwaltung dieser Beziehungen. Der Nachteil ist, es ist nahezu unmöglich zu löschen-Benachrichtigungen, wenn zum Beispiel eine Transaktion gelöscht wird, aber in meinem Anwendungsfall habe ich beschlossen, diese ist sowieso nicht brauchte.
Werde ich abrufen und füllen Sie die Texte auf der App-Seite wie folgt. Ps. Ich bin mit jemandem in der vksprintf Funktion (https://github.com/washingtonpost/datawrapper/blob/master/lib/utils/vksprintf.php), props an ihn!
Beachten Sie auch die Felder, auf die ich index, da werde ich zu finden, oder Sortieren Sie
Mein Datenbank-design ist wie folgt
==============================
TABELLE: Benutzer
==============================
TABELLE: Meldungen
[ClusterIndex] => (user_id, createdDateTime)
==============================
TABELLE: NotificationTexts
InformationsquelleAutor der Antwort Karl Johan Vallner
Tabelle sind folgende
Benutzer
Benachrichtigung
InformationsquelleAutor der Antwort Yasir Shabbir Choudhary