使用GAE中的任务队列插入批量数据

时间:2010-11-02 09:47:26

标签: google-app-engine google-cloud-datastore jdo bigtable

我正在使用Google App Engine创建一个Web应用程序。该应用程序有一个实体,用户将通过上传工具插入记录。用户可以选择最多5K行(对象)的数据。我使用DataNucleus项目作为JDO实现。以下是我将数据插入Data Store的方法。

  1. 从CSV读取数据并转换为实体对象并存储在列表中。
  2. 该列表分为较小的对象组,大约300 /组。
  3. 使用唯一ID作为密钥,使用内存缓存序列化每个组并将其存储在缓存中。
  4. 对于每个组,创建一个任务并将其与密钥一起插入到队列中。每个任务都调用一个servlet,它将此键作为输入参数,从内存中读取数据并将其插入数据存储并从内存中删除数据。
  5. 队列的最大速率为2 /分钟,桶大小为1.我面临的问题是任务无法将所有300条记录插入数据存储区。在300中,插入的最大值大约为50.我从memcache读取数据后验证了数据,并且能够从内存中获取所有存储的数据。我使用PersistenceManager的makepersistent方法将数据保存到ds。有人可以告诉我这个问题是什么吗?

    另外,我想知道,有没有更好的方法来处理批量插入/更新记录。我使用过BulkInsert工具。但在这种情况下,它不能满足要求。

1 个答案:

答案 0 :(得分:1)

这是App Engine mapreduce的完美用例。 Mapreduce可以从blob中读取文本行作为输入,它会为您分配输入并在任务队列中执行它。

当你说批量加载器“不满足要求”时,如果你说你不满足你的要求会有所帮助,但是 - 我认为在这种情况下,问题是你需要非管理员用户上传数据。