2010-07-09 28 views
5

Estoy experimentando con GAE durante los últimos 2 meses.¿Qué tan rápido es Google App Engine?

Estoy guardando registros en la tabla grande cargando el archivo CSV.

El tamaño de mi archivo de prueba es de 300 KB.

aquí lo que encontré

sistema local

  • Subir tomar menos de 1 segundo
  • Proceso 2500 registros en 3 segundos

En Google Sandbox

  • La carga tarda de 5 a 7 segundos.

  • El archivo de procesamiento da tiempo de espera.

  • Solo guarda 60-180 registros.

Mis preguntas son

  1. Por qué se tarda demasiado tiempo?
  2. ¿Hay alguna manera de reducir este tiempo?
  3. Google cuenta este procesamiento para usos de CPU. No revelan h/w, ¿qué CPU usan internamente? Quiero decir, ¿obtengo una CPU euquivalente o superior a PIII?

Editado por @Drew Sears 's respuesta.

lo que estoy haciendo en la actualidad

  1. cargar el archivo en GAE
  2. bytes de datos que se subidos. Por flujo, cuente líneas, guárdelo en una tabla grande.
  3. Hay un campo único, identificación, mi registro.
  4. Ahora, i Crear cola

int x = linesCount/50;

for(int i<0;i=x;i++) 
{ 
     x = i * 50; 
     Queue queue = QueueFactory.getQueue("test-queue"); 
     queue.add(TaskOptions.Builder.url("/TestQueue") 
       .param("id", id.toString()) 
       .param("startIdx",String.valueOf(x)) 
       .param("totRec",String.valueOf(50)) 
     ); 
    } 

int y = linesCount % 50; 
if(y > 0) 
{ 
    x = (linesCount/50) * 50; 
    Queue queue = QueueFactory.getQueue("test-queue"); 
    queue.add(TaskOptions.Builder.url("/TestQueue") 
      .param("id", id.toString()) 
      .param("startIdx",String.valueOf(x)) 
      .param("totRec",String.valueOf(y)) 
    );      
} 

servlet El procesamiento de tareas de almacenamiento y archivo utilizando el proceso totRec y startIdx el archivo y cerrarlo leer ..

+0

¿Es el tiempo que experimenta en Google sandbox en la primera solicitud? ¿Y las solicitudes consiguientes? – naikus

+0

La latencia que está experimentando no es causada por la falta de potencia de la CPU, sino por la implementación del almacén de datos GAE (y su conexión de red). GAE comparte recursos con otras aplicaciones en los mismos servidores, pero tienen muchos ciclos de CPU por recorrer ... Es el almacén de datos el que está rezagado. –

+0

En la primera solicitud, guarde solo 60 rceords. La siguiente solicitud mejora la velocidad y guarda 120-150 registros. ahora el máximo va a 184 registros – Manjoor

Respuesta

4

Esto no es realmente una gran manera de probar la escalabilidad de App Engine.

  1. Si usted está tomando 7 segundos para publicar 300KB, el cuello de botella es casi seguro que su ancho de banda aguas arriba, aguas abajo, no el ancho de banda de Google, ni nada que ver con App Engine.De forma rutinaria obtengo velocidades de carga mucho más rápidas.
  2. Si desea que las solicitudes terminen más rápido, minimice sus llamadas RPC. Cada datastore get, put o query es un viaje de ida y vuelta a un servidor externo. Si está recorriendo cientos de filas y haciendo una puesta dentro de cada iteración de ciclo, estará incurriendo en una cantidad masiva de sobrecarga innecesaria. Guarde todas sus entidades utilizando una ubicación de almacenamiento de datos y obtendrá resultados mucho más rápidos. La AppStats framework de Guido es una gran herramienta para encontrar oportunidades de optimización de RPC.
+1

+1 por mencionar los peligros de hacer un put() separado para cada fila –

+0

Puedo minimizar la solicitud de RPC, pero ¿cómo puedo reducir la solicitud del almacén de datos? Tengo que guardar 3k registros que necesitan una base de datos 3k (o una llamada makePersistant() en mi situación). ¿Hay un método de guardado masivo? s – Manjoor

+0

Lo mismo. Cada solicitud de almacén de datos es una llamada RPC. Sí, el almacén de datos le permite almacenar múltiples entidades en una sola llamada. En Python esto es solo db.put() con una lista de entidades; No sé cuál sería la sintaxis en Java. –