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