代码之家  ›  专栏  ›  技术社区  ›  Manjoor

谷歌App Engine Java批量更新

  •  0
  • Manjoor  · 技术社区  · 15 年前

    我需要上传一个.csv文件并将记录保存在bigtable中。 我的应用程序成功地分析了csv文件中的200条记录并保存到表中。

    这是我保存数据的代码。

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

    但是当没有记录增长时,它会给出超时错误。

    csv文件可能有多达800条记录。 是否可以在应用程序引擎中执行此操作?

    (类似于批量更新)

    2 回复  |  直到 12 年前
        1
  •  2
  •   Igor Artamonov    12 年前

    gae将应用程序请求限制为30秒,并且不能运行长任务。

    最好的方法是将这个csv分割成更小的块,然后逐个处理它们。如果您只能将其作为一个大文件上载,那么可以将其存储为二进制数据,然后使用 Task Queue (请注意,每个请求也限制在10分钟内,但您可以始终创建一系列任务)。或者您可以使用后端进行处理。

        2
  •  0
  •   Fábio Uechi    12 年前

    你可以在blobstore中存储你的csv文件( gzipped not )并使用 MapReduce job 读取并保持数据存储中的每一行。