我的要求是在中创建大量实体。我有csv文件,合并后的实体数量可以在50k左右。我试过以下几点:
1.逐行读取csv文件并在数据存储中创建实体。问题:运行良好,但超时,不能一次性创建所有实体。
2.上传了files存储中的所有文件并将其红色到数据存储问题:I尝试了Mapper函数来读取上传到files存储中的csv文件,并在数据存储中创建实体。我遇到的问题是,如果文件大小大于2Mb,mapper就不能工作。此外,我只是尝试读取servlet中的文件,但同样存在超时问题。
我正在寻找一种在数据存储中创建上面(50k+)大量实体的方法,所有这些都是一次完成的。
发布于 2015-12-28 15:11:16
实体的数量不是这里的问题(50K是相对微不足道的)。在最后期限内完成你的请求是问题所在。
从你的问题中还不清楚你在哪里处理你的CSV,所以我猜它是用户请求的一部分--这意味着你有60秒的任务完成期限。
任务队列
我建议您考虑使用任务队列,当您上传需要处理的CSV时,可以将它放到队列中进行后台处理。
当使用任务队列时,任务本身仍然有一个截止日期,但超过60秒(自动缩放时为10分钟)。您应该阅读更多关于文档中的截止日期的内容,以确保您了解如何处理这些错误,包括捕获DeadlineExceededError错误,以便您在CSV中运行时可以保存,以便在重试时从该位置恢复。
关于捕捉DeadlineExceededError的警告
警告: DeadlineExceededError可能会从程序中的任何地方引发,包括最终块,因此它可能会使您的程序处于无效状态。这可能会导致死锁或线程代码(包括内置线程库)中的意外错误,因为锁可能不会被释放。请注意(与Java不同),运行时可能不会终止进程,因此这可能会导致对同一个实例的未来请求出现问题。为了安全起见,您不应该依赖theDeadlineExceededError,而应该确保您的请求在时间限制之前就完成了。
如果您对上述情况感到关切,并且无法确保您的任务在10分钟的截止日期内完成,则您有两个选项:
https://stackoverflow.com/questions/34471900
复制相似问题