Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

221
Vistas
Múltiples INSERTAR datos después de SELECCIONAR y ACTUALIZAR para mysql2 en nodejs

Estoy buscando consejos sobre cómo abordar el siguiente problema (estoy seguro de que hay varias formas de abordar esto, pero en última instancia, no estoy lo suficientemente familiarizado con las bases de datos para saber cuál es el mejor enfoque).

El problema en cuestión es que tengo un conjunto 'grande' (unos pocos cientos) de elementos de datos que llegan cada 30 segundos. Hasta ahora, esto se ha manejado secuencialmente y no fue un problema cuando solo había unas pocas docenas. Ahora hemos aumentado la escala de esto realmente traquetea debido a las idas y venidas por inserción eventual. Creo que el camino a seguir es insertar todas las filas nuevas a la vez, pero no puedo pensar en una manera ordenada considerando todo el flujo.

Las tablas están configuradas de la siguiente manera (con las partes irrelevantes omitidas):

Dispositivos:
| identificación | Dirección | |:--:|:-------:| |1 |dirección1 | |2|dirección2| |3|dir4|

Datos del dispositivo: |ID|ID del dispositivo|Valor|Último| |:-:|:-----:|:---:|:----:| |1 |1 |22 | 0| |2|1|23|0| |3|1|22|1| |4|2|99|0| |5|2|99|1|

¡mesas!

Los dispositivos almacenan información de identificación sobre un dispositivo (bastante estática), mientras que DeviceData recopila información (valores) que emite el dispositivo (actualizaciones/inserciones constantes). Tenga en cuenta que la dirección funciona para ingresar la clave de cada registro y DeviceID es una clave externa para los dispositivos. Más reciente indica el dato más reciente para ese dispositivo (es decir, tiene la marca de tiempo más grande).

Los datos que recibo vienen en el siguiente formato (para Device ID 1):

 { "addr1": { "value": 22 }, "addr2": { "value": 99 } }

El proceso actualmente es:

Seleccione la ID para el dispositivo por su dirección

 SELECT ID FROM Devices WHERE Address = 'addr1'

El ID se almacena en $id

Actualice el registro en DeviceData para que ya no sean los datos "más recientes" para ese dispositivo

 UPDATE DeviceData SET Latest = 0 WHERE DeviceID = $id AND Latest = 1

Inserte los nuevos datos junto con el indicador 'más reciente' en DeviceData

 INSERT DeviceData SET DeviceID = $id, Value = 22, Latest = 1

Solía haber manipulaciones que se hacían después de la SELECCIÓN inicial (seleccionaba más datos que solo el ID), pero ese ya no es el caso (para explicar por qué no era solo una unión desde el principio).

(Si las tablas se ven rotas, honestamente no sé qué pasó, estaban bien en el editor. Lo agregué como una imagen en caso de que mi computadora portátil esté al 3%, no creo que vaya a hacer eso)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

actualice todas las filas en una consulta al último 0 e inserte todas sus filas en una consulta

 UPDATE DeviceData ,Devices INNER JOIN Devices ON DeviceData.DeviceID= Devices.ID SET DeviceData.Latest = 0 where Devices.Address in (1,2,3,4,5,6,7)

y luego hacer la inserción

 INSERT INTO DeviceData (column_list) VALUES (value_list_1), (value_list_2), ... (value_list_n);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda