Desarrollo y Tecnología > Mejorando el performance de SQS para millones de escrituras

Mejorando el performance de SQS para millones de escrituras

Hace ya casi un año que Amazon publicó que estaban desarrollando el soporte de Amazon SQS como «Event Source» para una función Lambda, y desde que la solución estuvo disponible buscaba una escusa para poder encontrar un mini proyecto para probarla.

Para el desarrollo interno de la empresa tengo un «Bot» que obtiene de manera diaria un CSV con alrededor de 1.000.000 de filas. Para todos los que estamos acostumbrados a trabajar con archivos grandes, 1M de datos no suena tan complejo, por lo que a pesar de tener mejores opciones decidí que era el momento de hacer una prueba de fuego parseando este archivo y enviando el resultado directamente a la cola fila por fila para luego ser procesado a través de una función lambda.

Este post es para comentar sobre la estructura final del proyecto, y como se fue modificando para poder funcionar de manera correcta.

Leer más

4 comentarios en «Mejorando el performance de SQS para millones de escrituras»

      • Claro pero deberia demorarse nomás de un par de minutos.

        Como consejo trata de meter todo en una transacción. mejora por 1000%
        te comentare por aquí el codigo

        $mysqli->report_mode = MYSQLI_REPORT_STRICT;
        $mysqli->query(«TRUNCATE TABLE empresas_sii;»);

        $mysqli->query(«START TRANSACTION»);
        $mysqli->query(«SET FOREIGN_KEY_CHECKS = 0;»);
        $mysqli->query(«SET UNIQUE_CHECKS = 0;»);
        $mysqli->query(«SET AUTOCOMMIT=0;»);

        echo «\r\nActualizando Base de Datos…»;
        echo «\r\nEste proceso puede tardar varios minutos, tenga paciencia…»;
        # Recorrer las filas del archivo csv fgetcsv(RECURSO,LARGO,DELIMITADOR,STRING ENCLOUSURE)
        while($data=fgetcsv($archivo, 0 ,$separador_columnas)){// 20 megas
        if($i>0){
        # Obtener la cantidad de columnas de la fila seleccionada
        $num=count($data);
        # $RUT; RAZON SOCIAL; NUMERO RESOLUCION; FECHA RESOLUCION; MAIL INTERCAMBIO; URL
        $rut=$mysqli->real_escape_string(«$data[0]»);
        $razon_social=$mysqli->real_escape_string(«$data[1]»);
        $numero_resolucion=$mysqli->real_escape_string(«$data[2]»);
        $fecha_resolucion=$mysqli->real_escape_string(«$data[3]»);
        $mail_intercambio=$mysqli->real_escape_string(«$data[4]»);
        $url_intercambio=$mysqli->real_escape_string(«$data[5]»);
        # NO existe el rut en la base datos clientes

        if(!$mysqli->query(«INSERT INTO empresas_sii (
        rut,
        razon_social,
        numero_resolucion,
        fecha_resolucion,
        mail_intercambio,
        url ) VALUES (‘$rut’,’$razon_social’,’$numero_resolucion’,’$fecha_resolucion’,’$mail_intercambio’,’$url_intercambio’);»)){
        printf(«Errormessage: %s\n», $mysqli->error);
        }else{
        echo «INSERTADO REGISTRO $i \r\n»;
        }

        }
        $i++;

        }

        $mysqli->query(«SET UNIQUE_CHECKS = 1»);
        $mysqli->query(«SET FOREIGN_KEY_CHECKS = 1»);
        $mysqli->query(«COMMIT»);
        $mysqli->query(«SET AUTOCOMMIT = 1»);

        Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.