IdeaManager - Geopras/IdeaWatcher GitHub Wiki
IdeaManager
- hält einen Snapshot der Ideenliste im Speicher
- für sämtliche Filterabfragen auf Ideen verwendet
- führt in regelmäßigen Abständen den Ranking-Algorithmus aus
- holt dabei eine aktuelle Liste aller Ideen aus der DB (nur mit den nötigen Attributen)
- berechnet für sie die Rankings für Hot und Trending
- speichert sie im Snapshot für die Filterung
- speichert die berechneten Rankings zurück in die DB
- läuft in einem extra Thread alle X Zeiteinheiten
- Monitor (Lock) schützt Snapshot der IdeenListe vor gleichzeitigem Zugriff durch Backend-Thread und Algorthmus-Thread
- Bsp:
- Backend - sortiert Snapshot-Liste nach Hot-Ranking;
- Algorithmus - ruft Ideenliste aus DB neu ab, berechnet Ranking und speichert in Snapshot
- Backend - will nun die ersten 10 der vermeintlich sortierten Liste abrufen => Liste nicht mehr sortiert
- => Monitor verhindert solche Probleme
- jeder Zugriff auf den Snapshot ist in einen kritischen Abschnitt gepackt
- der jeweilige Thread muss bei betreten seines kritischen Abschnitts darauf warten, dass der andere seinen verlassen hat