2011-01-31 74 views
1

我想用一些值填充我的数据存储区。做这个的最好方式是什么 ? 这是我的代码 -Google App Engine填充数据存储区条目

for n in range(seqlen): 
    for m in range(n+1): 
    for l in range(m+1): 
     temp = [-BIGINT for k in range(m-l+1)] 
     obj = DbEntity4D(key_name=str(n)+','+str(m) +','+ str(l)) 
     obj.value = temp 
     obj.put() 

还是这个更好?

for n in range(seqlen): 
    for m in range(n+1): 
    for l in range(m+1): 
     temp = [-BIGINT for k in range(m-l+1)] 
     obj[i] = DbEntity4D(key_name=str(n)+','+str(m) +','+ str(l)) 
     obj[i].value = temp 
     i = i+1 

    db.put(obj) 

或者还有其他更好的方法吗?

seqlen可以是1到1000.它可能无法在10分钟内完成整个过程,但我可以继续从之前离开我的下一个任务。

回答

2

通过消除数据存储的往返行为,批处理数据存储库存将节省大量时间。

它看起来像你试图用你的后一代码块(一次保存m实体)。在seqlen为1000的情况下,您一次最多可以编写1000个实体。但是,一次编写的实体数量会有所不同,因为您的最内层for循环随其生成的实体数量而变化。如果您等待保存到数据库,则可能会更快,直到您收集了n(某些大数目)的DbEntity4D实体,然后将它们保存(而不是始终在最内层循环之后立即保存它们)。当然,这可能会使逻辑更加复杂,从而允许下一个任务继续添加创建这些实体的地方,以避免前一个任务停止。

+3

同意。我还建议使用remote_api,而不是试图在单个请求或任务中执行此操作,因为在应用引擎之外运行的remote_api脚本可以长期运行。 – ryan 2011-01-31 15:54:19