簡體   English   中英

如何在Cloud Datastore中創建大量實體

[英]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

警告: DeadlineExceededError可能會從程序的任何位置(包括finally塊)引發,因此可能使程序處於無效狀態。 這可能導致線程代碼(包括內置線程庫)中的死鎖或意外錯誤,因為可能不會釋放鎖。 請注意(與Java不同),運行時可能不會終止進程,因此這可能會導致以后對同一實例的請求出現問題。 為了安全起見,您不應依賴DeadlineExceededError,而應確保您的請求在時限之前完成。

如果您擔心上述情況,並且不能確保您的任務在10分鍾的期限內完成,則有兩種選擇:

  1. 切換到手動縮放的實例,這將為您提供24小時的截止期限。
  2. 確保您的任務可以保存進度並在10分鍾期限之前返回錯誤,以便可以正確恢復該錯誤而不必捕獲錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM