Domanda

Ho bisogno di caricare un file .csv e salvare i record in bigtable. La mia applicazione analizzare correttamente 200 record nei file CSV e risparmi al tavolo.

Ecco il mio codice per salvare i dati.

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();
  }
    }
    }
}

Ma quando nessuno di record crescere dà errore di timeout.

Il file CSV può avere fino a 800 record. E 'possibile farlo in App-Engine?

(si parla di aggiornamento batch)

È stato utile?

Soluzione

GAE limite si app richiesta di 30 sec, e non è possibile eseguire lungo lavoro.

migliore approccio è quello di dividere questo CSV in blocchi più piccoli, ed elaborarli singolarmente, uno dopo l'altro. Nel caso in cui è possibile caricare solo come un unico grande file, è possibile memorizzare come dati binari, e poi di processo (split e analizzare) utilizzando Task Queue (nota che è anche limitata a 10 minuti per richiesta, ma si può sempre fare una catena di operazioni). Oppure si può backend all'utente di processo.

Altri suggerimenti

Si potrebbe memorizzare il file CSV nel blobstore ( gzip non ) e utilizzare un MapReduce lavoro di leggere e persistono ogni riga nel Datastore

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top