• RoundSparrow @ BT@bulletintree.comOPM
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    11 months ago
        hot_rank: 1728,
        hot_rank_active: 1728,
    
      -- Note: 1728 is the result of the hot_rank function, with a score of 1, posted now
      -- hot_rank = 10000*log10(1 + 3)/Power(2, 1.8)
    
    • RoundSparrow @ BT@bulletintree.comOPM
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      11 months ago
      lemmy@lemmy_alpha LOG:  duration: 50.220 ms  execute : WITH batch AS (SELECT a.id
      	               FROM post_aggregates a
      	               WHERE a.published > $1 AND (a.hot_rank != 0 OR a.hot_rank_active != 0)
      	               ORDER BY a.published
      	               LIMIT $2
      	               FOR UPDATE SKIP LOCKED)
      	         UPDATE post_aggregates a SET hot_rank = hot_rank(a.score, a.published),
      	         hot_rank_active = hot_rank(a.score, a.newest_comment_time_necro)
      	             FROM batch WHERE a.id = batch.id RETURNING a.published;
      	    
      2023-08-18 09:00:34.578 MST [1877420] lemmy@lemmy_alpha DETAIL: 
       parameters: $1 = '2023-08-16 23:40:31.149267', $2 = '1000'
      
      
      • RoundSparrow @ BT@bulletintree.comOPM
        link
        fedilink
        arrow-up
        1
        ·
        11 months ago
        CREATE FUNCTION public.hot_rank(score numeric, published timestamp without time zone) RETURNS integer
            LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE
            AS $$
        DECLARE
            hours_diff numeric := EXTRACT(EPOCH FROM (timezone('utc', now()) - published)) / 3600;
        BEGIN
            IF (hours_diff > 0) THEN
                RETURN floor(10000 * log(greatest (1, score + 3)) / power((hours_diff + 2), 1.8))::integer;
            ELSE
                RETURN 0;
            END IF;
        END;
        $$;
        
        
    • RoundSparrow @ BT@bulletintree.comOPM
      link
      fedilink
      arrow-up
      1
      ·
      11 months ago

      Difference between hot_rank and hot_rank_active

      SET hot_rank = hot_rank(a.score, a.published),
              hot_rank_active = hot_rank(a.score, a.newest_comment_time_necro)"