Mysql implementación de etiquetas de tendencias basadas en json

Estoy tratando de identificar las etiquetas de tendencias (basadas en los hits máximos) en series de tiempo usando la función mysql json. Debajo está mi mesa

CREATE TABLE TAG_COUNTER (
    account       varchar(36) NOT NULL,
    time_id       INT NOT NULL,
    counters      JSON,
    PRIMARY KEY   (account, time_id)
)

n cada solicitud de API web, obtendré varias etiquetas diferentes por cuenta y, según la cantidad de etiquetas, prepararé laINSERT ON DUPLICATE KEY UPDATE consulta. El siguiente ejemplo muestra la inserción con dos etiquetas.

INSERT INTO `TAG_COUNTER`
  (`account`, `time_id`, `counters`)
VALUES
  ('google', '2018061023', '{"tag1": 1, "tag2": 1}')
ON DUPLICATE KEY UPDATE `counters` =
  JSON_SET(`counters`,
           '$."tag1"',
           IFNULL(JSON_EXTRACT(`counters`,
                        '$."tag1"'), 0) + 1,
           '$."tag2"',
           IFNULL(JSON_EXTRACT(`counters`,
                        '$."tag2"'), 0) + 1
  );

time_id es aaaaMMddhh, y es una agregación por hora en cada fila.

Ahora mi problema es la recuperación de etiquetas de marcado. La consulta a continuación me dará una agregación para la etiqueta1, pero no sabremos las etiquetas antes de hacer esta consulta.

SELECT
SUBSTRING(time_id, 1, 6) AS month,
SUM(counters->>'$.tag1')
FROM TAG_COUNTER
WHERE counters->>'$.tag1' > 0
GROUP BY month;

Así que necesito un grupo genérico por consulta junto con ordenar por para obtener las etiquetas de tendencia para el tiempo por hora / día / mes.

La muestra de salida esperada es

Time(hour/day/month)  Tag_name  Tag_count_value(total hits)

Cuando he buscado en la web, en todas partes se menciona como a continuación{"tag_name": "tag1", "tag_count": 1} en lugar de directo{"tag1" : 1} y estaban usando tag_name en el grupo por.

Q1) Entonces, ¿es siempre obligatorio tener una clave json conocida para realizar el grupo por ...?

Q2) Si tengo que seguir este camino, ¿cuál es el cambio en mi consulta INSERTAR EN LA ACTUALIZACIÓN DE CLAVE DUPLICADA para esta nueva etiqueta json / estructura de valor? Dado que el contador debe crearse cuando no existe y debe incrementarse en uno cuando exista.

Q3) ¿Tengo que mantener una matriz de objetos

[
 {"tag_name": "tag1", "tag_count": 2},
 {"tag_name": "tag2", "tag_count": 3}
]

OR objeto de objetos como a continuación?

{
 {"tag_name": "tag1", "tag_count": 2},
 {"tag_name": "tag2", "tag_count": 3}
}

Entonces, ¿cuál es mejor por encima de la estructura json en términos de INSERT y RETRIEVAL del recuento de tendencias?

Q4) ¿Puedo ir con @ existen{"key" : "value"}ormato @ en lugar de{"key_label" : key, "value_lable" : "value"} y posible extraer tendencias ...? ya que estoy pensando que{"key" : "value"} es muy directo y bueno en cuanto a rendimiento.

Q5) Mientras recupero estoy usandoSUBSTRING(time_id, 1, 6) AS month. ¿Podrá usar index?

O ¿necesito crear varias columnas comotime_hour(2018061023), time_day(20180610), time_month(201806) y usa la consulta en columnas específicas?

O puedo usarmysql funciones de fecha y hora? ¿usará el índice para una recuperación más rápida?

Por favor ayuda

Respuestas a la pregunta(2)

Su respuesta a la pregunta