sql >> Database >  >> RDS >> Mysql

Op Mysql json gebaseerde implementatie van trending tags

Ik zie geen goede reden waarom je hier JSON gebruikt. Het is ook niet duidelijk waarom u denkt dat een "nosql-schema " binnen MySQL zou alles beter doen.

Wat je waarschijnlijk nodig hebt is zoiets als dit:

CREATE TABLE TAG_COUNTER (
    account       varchar(36) NOT NULL,
    time_id       INT NOT NULL,
    tag_name      varchar(50) NOT NULL,
    counter       INT UNSIGNED NOT NULL,
    PRIMARY KEY   (account, time_id, tag_name)
);

Dit zal uw vragen vereenvoudigen. Het INSERT-statement ziet er als volgt uit:

INSERT INTO TAG_COUNTER
  (account, time_id, tag_name, counter)
VALUES
  ('google', 2018061023, 'tag1', 1),
  ('google', 2018061023, 'tag2', 1)
ON DUPLICATE KEY UPDATE counter = counter + VALUES(counter);

Het SELECT-statement zou er ongeveer zo uit kunnen zien

SELECT
    SUBSTRING(time_id, 1, 6) AS month,
    tag_name,
    SUM(counter) AS counter_agg
FROM TAG_COUNTER
GROUP BY month, tag_name
ORDER BY month, counter_agg DESC;

Merk op dat ik niet heb geprobeerd de tabel/het schema te optimaliseren voor gegevensgrootte en prestaties. Dat zou een andere vraag zijn. Maar je moet zien dat de zoekopdrachten nu veel eenvoudiger zijn.



  1. Retourneer een percentage van een resultaatset in SQL Server

  2. MySQL Database Service – Nieuwe HeatWave-innovaties

  3. toegang krijgen tot een kolomaliassen in de waar-clausule in postgresql

  4. mysql race-conditie invoegen