向Google App Engine NDB(Python)添加大量数据

Leo*_*eel 0 python google-app-engine python-2.7

我正在开发一个项目,要求我将大量数据(在数万个实体的规模上)导入Google App Engine NDB.

数据存储在一个文本文件中,我为此编写了一个解析程序,该程序生成文件中找到的实体列表,然后使用该put_multi()方法将其写入数据库.

当我将它应用于测试几百到几千个条目的数据集时,它工作正常; 将它应用于真实的数据集(现在大约有30,000个条目,但它会增长),然而,抛出一个DeadlineExceededError.我猜这意味着程序运行时间过长而App Engine会将其关闭.

所以我的问题是,如何在迭代一堆数据时运行需要很长时间才能完成的代码?

我已经阅读了一些关于任务队列的东西,但这似乎更多的是针对一个需要重复多次的短任务(而在这里,我真的只是在等待put_multi()完成).

这也是一个非常糟糕的用户体验,页面需要很长时间才能加载.我有什么方法可以让我的代码在用户初始化数据导入时运行,只需启动服务器上幕后实际解析和编写代码,同时用户获得一个页面说明数据正在处理中的背景?

谢谢

Pat*_*ice 5

有一个put_multi_async(),需要10毫秒才能完成,然后在后台执行put.您仍然受限于数据存储截止日期,其中:

默认截止日期为60秒(https://developers.google.com/appengine/docs/java/datastore/queries#Java_Data_consistency)

你可能需要在不同的调用中传播你的异步调用(每个调用几千个,写​​入速度将取决于实体的确切大小)

编辑:根据mgilson的评论,

你也受到内存限制的限制.如果你有足够的内存来拉入整个文件,那么任务队列可能就是答案(将一堆不同的文件放入不同的任务中)