我想從Google數據存儲中加載大量數據。在Google數據存儲中使用遊標進行多線程處理
所以,第1步:我運行查詢(使用keysOnly = true)並遍歷遊標,以便每個指向一個包含600個對象的頁面的起始位置。我將遊標存儲在局部變量中。
第2步:我爲每個遊標分離一個線程,在每個線程中加載和處理600個對象。
這不是通常使用遊標的方式。
但是,它看起來對我來說是正確的。步驟1和步驟2中的實際查詢字符串是相同的。這類似於通常的無狀態web用例,用戶可能會要求Next,Back,然後重新載入前一頁;不需要直接從前一個光標查詢的結果中獲得遊標。
我不想按順序遍歷遊標,然後爲了並行處理在給定的遊標查詢中加載的對象而拆分線程,因爲我想從數據庫並行實現IO密集型查詢。
我得到了一些不一致的結果,似乎涉及錯過的頁面和重複加載的對象。這是多線程加載Google Datastore大量數據的正確方法嗎?或者,如果不是,那是什麼?
謝謝,這可能會奏效,但慢速部分是實際查詢,而不是實體後處理。 ,但瓶頸是IO。 –
你只需要一個鍵來創建一個任務,然後在一個任務中獲取一個實體。使用按鍵查詢,它會快得多。 –
謝謝。你是否說我應該按鍵查詢順序遍歷所有對象(必要時使用遊標)?然後,並行執行獲取操作(使用任務)?這確實意味着每個實體打兩次DB,對吧? –