sql >> Database >  >> RDS >> Mysql

Implementatie van de meest bekeken functiedatabase

hebben de volgende tabellen:1. weergaven2. views_hourly_summary3. views_daily_summary4. views_monthly_summary5. views_alltime_summary

laat een cron-taak uitvoeren met de volgende intervallen:

  1. voer elk uur uit en aggregeer de views voor dat uur uit de views-tabel en sla het pre-aggregated resultaat op in de views_hourly_summary tabel, werk ook de views_alltime_summary tabel bij

  2. aan het einde van elke dag uitvoeren en de weergaven voor die dag preaggregeren uit de urentabel en het vooraf samengevoegde resultaat opslaan in de tabel views_daily_summary

  3. aan het einde van elke maand uitvoeren en de weergaven voor die dag preaggregeren vanuit de urentabel en het vooraf samengevoegde resultaat opslaan in de views_daily_summary tabel

vervolgens moet je bij het ophalen van resultaten wat rekenwerk doen als volgt:

  1. Als u bijvoorbeeld de weergaven van de afgelopen 4 uur wilt ophalen, haalt u de gegevens van 3 hele uren op uit de uurtabel en haalt u de overige gegevens als volgt uit de weergaventabel:

    selecteer item_id, sum(views) as viewsfrom views_hourly_summarywhere uur tussen concat(left(now() - interval 3 hour, 14), '00:00') en concat(left(now(), 14), '00:00' )groeperen op item_id

    vakbond

    selecteer item_id, count(1) as viewsfrom viewswhere datetime tussen (now() - interval 4 uur) en concat(left(now() - interval 3 hour, 14), '00:00') of datetime> concat(left( now(), 14), '00:00')groeperen op item_id



  1. WHERE_IN query met een samengestelde sleutel?

  2. Java-type voor datum/tijd bij gebruik van Oracle Date met Hibernate

  3. DROP TABEL INDIEN BESTAAT in SQLite

  4. MYSQL verwijdert alle resultaten met count(*)=1