Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

336
Views
Obtenga N número de filas de mysql y actualice los valores en las columnas al mismo tiempo

Necesito procesar miles de archivos almacenados en un depósito S3. Mi idea era activar un montón de EC2 VMS (96 núcleos cada uno) y hacer que se comunicaran con una base de datos MySQL a través de Python para obtener 96 rutas S3 a los archivos que necesita procesar. También quiero registrar si está en progreso o ha sido procesado con una columna EN_PROGRESO Y PROCESADO establecida en 0 o 1. Tengo la declaración actual, el problema con el que me encuentro es que actualiza el valor EN_PROGRESO, pero no estoy seguro de cómo seleccionar/devolver los 96 nombres de archivo necesarios para procesar. No puedo ejecutar SELECT * FROM temp, después de ejecutar la actualización devuelve un error.

 UPDATE dev_gba.`dev-l1c` as dev SET dev.IN_PROGRESS = 1 WHERE dev.`index` in (SELECT * FROM (SELECT `index` FROM dev_gba.`dev-l1c` WHERE IN_PROGRESS =0 AND PROCESSED =0 ORDER BY RAND() LIMIT 96) temp );

Mi otra idea era obtener la identificación de la instancia EC2 usando python, actualizar una columna INSTANCE_ID y luego usar otra declaración para obtener las filas con esa identificación de instancia específica. El otro desafío que parece que no puedo resolver es evitar que otras instancias seleccionen las mismas filas. Si tengo 10 instancias que consultan la base de datos al mismo tiempo para 96 filas aleatorias, me preocupa que pueda haber alguna superposición. Mi pensamiento para resolver esto fue agregar un tiempo de espera aleatorio en mi secuencia de comandos de python.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Su pregunta no es muy clara acerca de dónde obtiene estas instancias, así que supongo un poco.

Pruebe un SQL como este para evitar condiciones de carrera. Asegúrese de utilizar el motor de almacenamiento InnoDB de MySQL; MyISAM y AriaDB no admiten transacciones.

 START TRANSACTION; /* get the indexes to process */ CREATE TEMPORARY TABLE to_process SELECT index FROM dev_gba.`dev-l1c` WHERE IN_PROGRESS = 0 AND PROCESSED =0 ORDER BY RAND() LIMIT 96; /* do your update */ UPDATE dev_gba.`dev-l1c` SET IN_PROGRESS = 1 WHERE index IN (SELECT index FROM to_process); /* retrieve the items to process */ SELECT * FROM dev_gba.`dev-l1c` WHERE index IN (SELECT index FROM to_process); /* get rid of the temp table */ DROP TABLE to_process; /* end the transaction */ COMMIT;

Algo a tener en cuenta: las máquinas virtuales de AWS suelen estar vinculadas a la E/S y la red. Puede obtener un mejor rendimiento mediante el uso de instancias más pequeñas y considerablemente más baratas, y utilizando menos simultaneidad por instancia. Además, hay mucho trabajo de sistema operativo que hacer cuando se realizan muchas operaciones simultáneas de archivos o de red. Deje al menos un núcleo o dos para ese trabajo.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!