Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Implementierung von auf Mysql JSON basierenden Trend-Tags

Ich sehe keinen guten Grund, warum Sie hier JSON verwenden. Es ist auch nicht klar, warum Sie glauben, dass ein "nosql schema " innerhalb von MySQL würde alles besser machen.

Was Sie wahrscheinlich brauchen, ist so etwas:

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

Dies vereinfacht Ihre Abfragen. Die INSERT-Anweisung würde wie folgt aussehen:

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

Die SELECT-Anweisung könnte etwa so aussehen

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;

Beachten Sie, dass ich nicht versucht habe, die Tabelle/das Schema für Datengröße und Leistung zu optimieren. Das wäre eine andere Frage. Aber Sie müssen sehen, dass die Abfragen jetzt viel einfacher sind.