Mysql
 sql >> Database >  >> RDS >> Mysql

Implementazione di tag di tendenza basati su mysql json

Non vedo una buona ragione per cui usi JSON qui. Inoltre, non è chiaro il motivo per cui credi che un "schema nosql " all'interno di MySQL farebbe di meglio.

Quello di cui hai probabilmente bisogno è qualcosa del genere:

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

Questo semplificherà le tue domande. L'istruzione INSERT sarebbe simile a:

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'istruzione SELECT potrebbe essere qualcosa del genere

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;

Si noti che non ho provato a ottimizzare la tabella/schema per le dimensioni e le prestazioni dei dati. Sarebbe un'altra domanda. Ma devi vedere che ora le query sono molto più semplici.