[英]How to create large number of entities in Cloud Datastore
我的要求是在Google Cloud Datastore中創建大量實體。 我有csv文件,並且合並的實體數可以約為50k。 我嘗試了以下操作:
1.逐行讀取一個csv文件,並在datstore中創建實體。 問題:它運作良好,但超時,無法一次性創建所有實體。
2.在Blobstore中上載了所有文件,並將它們重新存儲到數據存儲中。 問題:我嘗試使用Mapper函數讀取在Blobstore中上載的csv文件,並在數據存儲中創建實體。 我遇到的問題是,如果文件大小超過2Mb,映射器將無法正常工作。 我也只是嘗試讀取servlet中的文件,但又出現了超時問題。
我正在尋找一種一次性創建數據存儲區中超過50k個以上實體的方法。
這里的實體數量不是問題(50K相對來說是微不足道的)。 問題是在截止日期之前完成您的請求。
從您的問題尚不清楚,您在哪里處理CSV,所以我想它是用戶請求的一部分-這意味着您有60秒的任務完成期限。
我建議您使用Task Queues進行研究 ,在其中上傳需要處理的CSV時, 會將其推送到隊列中進行后台處理。
當使用“任務隊列”時,任務本身仍然有最后期限,但是最后期限大於60秒(自動縮放時為10分鍾)。 您應該在文檔中閱讀有關期限的更多信息,以確保您了解如何處理DeadlineExceededError
,包括捕獲DeadlineExceededError
錯誤,以便可以保存CSV格式的文件,以便在重試時可以從該位置恢復。
警告: DeadlineExceededError可能會從程序的任何位置(包括finally塊)引發,因此可能使程序處於無效狀態。 這可能導致線程代碼(包括內置線程庫)中的死鎖或意外錯誤,因為可能不會釋放鎖。 請注意(與Java不同),運行時可能不會終止進程,因此這可能會導致以后對同一實例的請求出現問題。 為了安全起見,您不應依賴DeadlineExceededError,而應確保您的請求在時限之前完成。
如果您擔心上述情況,並且不能確保您的任務在10分鍾的期限內完成,則有兩種選擇:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.