Google App Engine-Actualización de Java por lotes
-
27-09-2019 - |
Pregunta
necesito para cargar un archivo CSV y guardar los registros en Bigtable. Mi solicitud analizar con éxito 200 registros en los archivos CSV y guardar en la tabla.
Aquí está mi código para guardar los datos.
for (int i=0;i<lines.length -1;i++) //lines hold total records in csv file
{
String line = lines[i];
//The record have 3 columns integer,integer,Text
if(line.length() > 15)
{
int n = line.indexOf(",");
if (n>0)
{
int ID = lInteger.parseInt(ine.substring(0,n));
int n1 = line.indexOf(",", n + 2);
if(n1 > n)
{
int Col1 = Integer.parseInt(line.substring(n + 1, n1));
String Col2 = line.substring(n1 + 1);
myTable uu = new myTable();
uu.setId(ID);
uu.setCol1(MobNo);
Text t = new Text(Col2);
uu.setCol2(t);
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(uu);
pm.close();
}
}
}
}
Sin embargo, cuando no hay registros de crecer da error de tiempo de espera.
El archivo CSV puede tener hasta 800 registros. ¿Es posible hacer eso en App-motor?
(algo así como actualización por lotes)
Solución
GAE límite que la aplicación solicitud a 30 segundos, y no se puede ejecutar tarea larga.
El mejor enfoque consiste en dividir este CSV en trozos más pequeños, y procesarlos individualmente, uno tras otro. En el caso de que usted puede cargar sólo como un archivo grande, se puede almacenar como datos binarios, y después del proceso (split y de análisis) usando cola de tareas (nota que también está limitado a 10 minutos por cada solicitud, pero siempre se puede hacer una cadena de tareas). O puede backend usuario proceso.
Otros consejos
Se podría almacenar el archivo CSV en el almacén de blob ( gzipped o no ) y utilizar un MapReduce trabajo para leer y persisten cada línea en el almacén de datos