Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Implementação de tags de tendências baseadas em mysql json


Não vejo uma boa razão para você usar JSON aqui. Também não está claro por que você acredita que um "esquema nosql " dentro do MySQL faria qualquer coisa melhor.

O que você provavelmente precisa é algo assim:
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)
);

Isso simplificará suas consultas. A instrução INSERT ficaria assim:
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);

A instrução SELECT pode ser algo assim
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;

Observe que não tentei otimizar a tabela/esquema para o tamanho e o desempenho dos dados. Essa seria uma pergunta diferente. Mas você deve ver, que as consultas são muito mais simples agora.