Mysql
 sql >> Base de données >  >> RDS >> Mysql

Implémentation des balises de tendance basées sur MySQL json

Je ne vois pas de bonne raison pour laquelle vous utilisez JSON ici. On ne sait pas non plus pourquoi vous pensez qu'un "schéma nosql " dans MySQL ferait quelque chose de mieux.

Ce dont vous avez probablement besoin est quelque chose comme ceci :

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)
);

Cela simplifiera vos requêtes. L'instruction INSERT ressemblerait à :

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);

L'instruction SELECT pourrait ressembler à ceci

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;

Notez que je n'ai pas essayé d'optimiser la table/schéma pour la taille des données et les performances. Ce serait une autre question. Mais vous devez voir que les requêtes sont beaucoup plus simples maintenant.