2017-10-13 93 views
0

我試圖推出相同的10個目標到大量的網站。我將目標存儲在toAddArray中,並且在循環中,他們將根據當前網站的目標數量創建或更新目標。首先我創建批處理,然後循環添加目標到批處理中(因爲寫操作沒有失敗,所以省略了目標代碼),然後執行批處理。谷歌分析管理API Java包批次不工作

代碼我正在

 //Create batch from Analytics Object 
     BatchRequest b = analytics.batch(); 
     // in loop determine create or update based off current Goal list size 
     FOR LOOP IS HERE 
     if(y < currentSize) 
      { 
       //some code for inserting the goal 
       analytics.management().goals().update(ACTIVE_ACCOUNT_ID, ACTIVE_PROPERTY_ID, ACTIVE_PROFILE_ID, String.valueOf(y+1), toAddArray[y]).queue(b, setCallback("Successfully Added Goal")); 
      } 
      else{ 
       // Some code for when I update the goal 
       // Send to queue 
       analytics.management().goals().insert(ACTIVE_ACCOUNT_ID, ACTIVE_PROPERTY_ID, ACTIVE_PROFILE_ID, toAddArray[y]).queue(b, setCallback("Successfully Added Goal")); 
      } 

      FOR LOOP ENDS 
      //Execute the batch 
      b.execute(); 

發生什麼事

當我運行此我得到了10個進球的回調,第5-6回來的成功和最後4將返回超出限額。據我所知,批處理系統的要點是將URL編譯成一個命中並一次發送,以減少服務器的負載。

這個系統似乎更像是一個排隊系統,它有它的位置,但不能幫助我減少我正在使用的寫入次數。由於我正在爲1000個左右的網站編寫10個目標,因此我正在尋找每天寫10k個網站。每個項目每天有500個寫入限制,這使得它成爲20天的事情。如果我只有每個配置文件的寫入,這將是一個2天的事情。我要求Google團隊增加我的API配額,並將目標更新測試版訪問權限添加到另外5個項目中,以便我可以開始切換密鑰,但在此期間,我想了解是否有某件事我可以做批量處理作爲一個單一的寫作工作。

回答

0

使用批處理的性能增益僅被稱爲權限(user management docs)。

我相信你說得對,當你說打電話的時候就好像你一次只做一個電話一樣。當您一次發送10個電話時,您可能會收到配額錯誤。我猜它是1.5qps per Account ID write limit

如果你需要做許多寫你可能需要implement exponential backoff.

我希望這可以幫助,祝你好運:)

+0

感謝您的回答喬希。在過去,我一直用自己的「隊列」來擊打命中,然後推動這個過程定期休眠,以達到API限制。 [這裏](https://developers.google.com/analytics/devguides/config/mgmt/v3/batching)是「最佳實踐」頁面的鏈接,它詳細介紹瞭如何將它用於許多操作和旨在減少API的點擊次數。它看起來好像這個Java類實際上並不使用隊列來生成HTTP請求並將它們批處理在一起。我自己會這樣做,並提出要求。 –