Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/04/2012, 04:14
Avatar de ciscoh4x0r
ciscoh4x0r
 
Fecha de Ingreso: junio-2010
Ubicación: Londres, Inglaterra
Mensajes: 300
Antigüedad: 13 años, 10 meses
Puntos: 12
Exclamación Script enviar datos de servidor1 a servidor2

Hola amigos,

Tengo el siguiente problema: Estoy enviando datos de el Servidor1 al Servidor2, pero la cuestión es que va muy lento. El proceso tarda alrededor de 5 - 8 horas en completarse o simplemente se congela, y ya no envía nada ni se actualiza nada, ni pasa nada., lo cual no lo puedo tolerar/permitir/dejar , se supone que esto máximo debería demorará 30 minutos - 1 hora....

Lo que hace: El script en PHP toma los datos de la base de datos MySQL en el Servidor1 y los envia a la base de datos MySQL del Servidor2, donde este los procesa y crea una lista y contenido para cada usuario con esta información, luego crea un archivo en HTML y programa una tarea para enviarse todos los días.

Lo que busco, es saber como puedo optimizar este proceso o que puedo hacer para acelerarlo, estamos perdiendo tiempo valioso que necesitamos recuperar.

Como dato crucial: Yo creo que un problema es la memoria RAM de el servidor1, pues este servidor pasa con memoria de 256mb libre para este proceso o menos.

Como solución a esto: El script fue hecho en 4 partes (4 archivos php) para salvar procesos y memoria.

Esto es lo que hace:

Código PHP:
Ver original
  1. function createCampaign() {
  2.     ini_set('memory_limit', '1024M');
  3.     set_time_limit(0);
  4.    
  5.     try {
  6.         $listId = 17;
  7.         if (isset($listId) && $listId > 0) {
  8.             $customerList = getCustomerList();
  9.             foreach ($customerList as $customer) {
  10.                 $params = getCustomFieldValuesForSubscriber($customer['subscriber_email']);
  11.                 if (isset($params) && count($params) > 0) {
  12.                     $dynamicContent = $params['dynamic_content'];
  13.                     unset($params['dynamic_content']);
  14.                     if (isset($dynamicContent)) {
  15.                         //addSubscriber($customer['subscriber_email'], $listId, $params);
  16.                         addDynamicContentBlock($dynamicContent, $customer['subscriber_email'], $listId, $customer['customer_id']);
  17.                         Mage::log("Added subscriber ..." . $customer['customer_id']);
  18.                     }
  19.                     unset($dynamicContent);
  20.                 }
  21.                 unset($params);
  22.             }
  23.             //scheduleCampaign($listId);
  24.         } else {
  25.             Mage::log( "Contact list not present.");
  26.         }
  27.     } catch (Exception $e) {
  28.         Mage::log("Exception occured .." . $e);
  29.     }
  30. }
  31. function sendRequest($requestUrl, $requestType, $params) {
  32.     if (isset($requestUrl) && isset($requestType)) {
  33.         $session = curl_init($requestUrl);
  34.  
  35.         if ($requestType === "POST") {
  36.             curl_setopt($session, CURLOPT_POST, true);
  37.             curl_setopt($session, CURLOPT_POSTFIELDS, $params);
  38.         }
  39.  
  40.         curl_setopt($session, CURLOPT_HEADER, false);
  41.         curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
  42.  
  43.         $response = curl_exec($session);
  44.         curl_close($session);
  45.  
  46.         //print_r($response);
  47.         return $response;
  48.     }
  49. }
  50.  
  51. function scheduleCampaign($listId) {
  52.     $htmlBody = getHtmlTemplate();
  53.     if (isset($htmlBody) && isset($listId)) {
  54.         $requestUrl = "http://www.dominio.com/ruta/archivo.php";
  55.         $requestType = "POST";
  56.         $params = array('htmlBody' => $htmlBody,
  57.             'listId' => $listId);
  58.         sendRequest($requestUrl, $requestType, $params);
  59.     }
  60. }


No es todo el código, pero es la idea de como lo hago, esto se repite el proceso y hace:
- Lista
- Suscriptores
- Datos
- Ofertas
- Y crea un HTML de todo

Y con esto tengo que alimentar la base de datos, la información al Server2 pero este tiene que crear todo en él no de la misma forma, pero tiene que crearla..

¿Ideas?

Agradezco cualquier comentario sobre como acelerar la transferencia de estos datos, pues va como lo peor.
__________________
Algún día habrá una persona mejor que yo, pero esa persona no eres tú, ni ese momento es ahora...