Frage

Ich war in einer sehr einfachen Twitter-ähnlichen App zu denken, ich erwäge Unterstützung nur twits und die Zeitlinie.

Aber mein Kopf, ziemlich viel zu relationalen Modellen verwendet ... kann nicht mit einem vernünftigen Modell in Azure-Tabellen oder NoSQL kommen. Im Grunde, dachte ich in:

  • Ein Benutzer kann andere Benutzer hinzufügen, Freunde.
  • Ein Benutzer kann Nachrichten schreiben (bis zu 200 Zeichen).
  • Die Nachrichten werden immer geordnet dargestellt durch Zeit, die neueste der erste.
  • Die Benutzerseite zeigt seine letzten 20 Nachrichten.
  • Die Hauptseite (Zeitlinie) zeigt die letzte 20 Nachrichten von ihm und seinem Freunde.

Ganz einfach: D

Wenn ich alle Nachrichten in einem einzigen Tisch, und ich habe die userId als Partition Schlüssel ... alles ist einfach, aber ... Ich glaube nicht, dass diese Lösung sehr gut Skalen. Aber auch andere Lösungen machen die Zeitlinie Seite sehr komplex oder sehr uneffizient, weil es nicht um ist die letzten 20 Nachrichten von jedem Ihren Freunden zu bekommen, es zu bekommen über die letzten 20 von allen zusammen ... und, dass mein Geist weht. Es könnte sein, dass Sie einen sehr ärgerlich Freund haben und die 20 Nachrichten neuesten sind von ihm: D

Was für eine skalierbare und effiziente Art und Weise könnte diese Informationen in einer Azure-Tabellen Mode zu speichern?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

würde ich sagen, mit allein Azure Tabellen Speicher nicht ausreicht. Sie sollten Azure Queues auch verwenden. Wenn eine Meldung in der es kommt wird in die Warteschlange gestellt. Ein Arbeiter nimmt die Nachrichten aus der Warteschlange und verarbeitet sie.

  1. Die Nachricht geht an der öffentlichen Timeline (Tabelle durch Zeitstempel verkeilt)
  2. Der Arbeiter erhält alle Anhänger des Benutzers, der die Nachricht und legt eine Kopie der Nachricht auf jedem ihrer Zeitrahmen (Tabelle von followerId verkeilt) geschrieben
  3. Natürlich die Nachricht wird auch auf der Zeitleiste des Benutzers platziert. (Tabelle verkeilt durch Benutzer-ID)

Es scheint, wie dies eine verschwenderische Methode sein könnte, aber Sie sind für die Leseleistung mit Eventual Consistency auf dem Schreib optimieren. kommt von der Dinge vereinfacht Seite Lese zu entfernen.

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