Frage

Ich baue eine Website. Es hat Gruppen, die Benutzer anschließen können.

Der Unterschied zwischen dieser und "normalen" Gruppen ist diese Mitgliedschaft Temporär - Wenn ein Benutzer eine Gruppe verbindet, entscheidet er die Länge der Mitgliedschaft: 5 Tage, a Woche, 2 Wochen usw. (Auswahlmöglichkeiten sind vordefiniert). Oder potenziell alles Mitgliedschaften könnten auf die gleiche Länge sein - sagen Sie eine Woche - wenn das macht einfach einfacher.

Ich würde gerne einen Tally der Anzahl der Mitglieder von jedem haben Gruppe. Die Zahl muss nicht genau bis zur letzten Sekunde genau sein. Aber es kann auch nicht auch nicht so sein, dass auch nicht der Datum ist - sagen Sie, sollte einmal aktualisiert werden einen Tag.

Der "offensichtliche" Weg, um die Anzahl der Mitglieder zu berechnen, scheint zu sein Wenn Sie einen Cron-Job ausführen, sagen Sie täglich, und gehen Sie jedes Mitglied von jedem Gruppe nacheinander. Wenn eine Mitgliedschaft abgelaufen ist, entfernen Sie dieses Mitglied von der Gruppe und dem Dekrementieren der Mitgliedschaft des Konzerns um 1.

Dieser Ansatz erscheint sehr ineffizient und nicht sehr skalierbar. Mit einer große Anzahl von Gruppen, es könnte für immer dauern.

Können Sie sich an einen besseren Weg vorstellen? Die Mitgliedschaft zählt muss nicht der letzten Sekunde genau sein. Es kann ungefähr sein und (leicht) veraltet. Auch wenn es einen Unterschied macht Mitgliedschaften können auf die gleiche Länge sein, sagen Sie eine Woche.

War es hilfreich?

Lösung

Bewahren Sie eine Liste auf, wie viele Personen derzeit in jeder Gruppe sind.Speichern Sie auch eine Liste von Tagen.Jeder Tag enthält eine Liste von Gruppen und wie viele Personen an diesem Tag von dieser Gruppe subtrahieren.

Wenn eine Person eine Gruppe einschließt, fügen Sie der Gruppe insgesamt 1 hinzu, und fügen Sie dem People-to-subtrahieren für diese Gruppe an dem Tag, an dem seine Mitgliedschaft abläuft, 1 an den People-to-Subtrahieren hinzufügen.

Wenn sich das Ablaufdatum einer Person ändert, entfernen Sie 1 von der People-to-Subtrahtration vom alten Ablaufdatum (für diese Gruppe) und fügen Sie 1 zum neuen Ablaufdatum hinzu.

Natürlich subtrahieren Sie einmal den richtigen Betrag von jeder Gruppe für diesen Tag.

Andere Tipps

Wenn alle Mitgliedschaften die gleiche Länge sind, pflegen Sie einfach ein FIFO von Mitgliedschaften aufgrund von Ablauf.Jedes Mal, wenn Sie ein neues Mitglied erhalten, fügen Sie dem Ende der Liste einen Eintrag "Abläufe" hinzu, wobei das Datum 1 Woche später eingestellt ist.

Nun, so oft Sie möchten, überprüfen Sie die Vorderseite der Liste für auslaufende Mitgliedschaften und aktualisieren Sie die Anzahl der Gruppe.Halten Sie an, wenn Sie den ersten Eintrag erreichen, der noch nicht abgelaufen ist.

Dies kann auch für Mitgliedschaften mit variabler Länge arbeiten, aber Sie müssen eine sortierte Liste aufrechterhalten.

Wenn ein Mitglied verbindet, wissen Sie, wann ihre Mitgliedschaft abläuft.Anstatt nach einer Liste der Mitglieder zu suchen, um täglich (oder jedoch oft) zu deaktivieren, können Sie jedem Mitglied der entsprechenden Liste der Mitgliedschaften hinzufügen, die am selben Tag auslaufen.Dann gehen Sie jeden Tag einfach durch und löschen die abgelaufenen Mitgliedschaften für diesen Tag.Es ist ziemlich viel, was Sie gesagt haben, außer dass Sie statt suchen, sondern die Ergebnisse speichern.

Die Größe Ihrer Lagerung ist proportional zur Länge Ihrer längsten Mitgliedschaft.

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