enkore / potstats2

pOTStats 2.0, ein pOTsches Informationsportal
https://potstats2.enkore.de
European Union Public License 1.2
4 stars 1 forks source link

backend: Statistiken mit xy Millionen Posts gangbar machen #20

Closed enkore closed 6 years ago

enkore commented 6 years ago
enkore commented 6 years ago

Ok, stellt sich raus, dass das eigentlich ganz einfach ist. Man baut sich halt das Datum aus (year, doy) zusammen und konvertier das wieder zum Wochentag zurück.

func.to_char(
  func.cast(func.concat(DailyStats.year, '-01-01'), Date) +
  func.cast(func.concat(DailyStats.day_of_year, ' days'), Interval),
'ID')
enkore commented 6 years ago

An den APIs hat sich natürlich nichts geändert.

enkore commented 6 years ago

active_users OTOH kann man nicht einfach aufsummieren (:D)

Und eigentlich ist auch AVG(AVG(x)) technisch nicht wirklich korrekt, wenn die Grundmengen von x stark unterschiedlich groß sind.

enkore commented 6 years ago

active_users ist jetzt zwar richtig, aber die Lösug ist irgendwie ziemlich hässlich und eher langsam. Außerdem müsste man das nochmal mittels eines Subqueries umformulieren, weil die Art und Weise (UNNEST()), wie der Query die Anzahl der eindeutigen UIDs pro aggregierter Zeile erfasst effektiv ein Join/Kreuzprodukt der Tabelle mit den einzelnen Array-Zeilen bedeutet, weswegen gerade alle anderen Statistiken viel zu hoch sind (und das ist auch der Grund, warum das langsam ist: Postgres verarbeitet da statt COUNT(Tabelle) COUNT(Tabelle) * GESAMTLÄNGE(ALLER ARRAYS) Zeilen).

Ich würd die Statistik allerdings ungern weglassen, weil sie eine der interessanteren ist.