2017-10-13 6 views
0

J'essaie de déployer les mêmes 10 objectifs sur un grand nombre de sites Web. J'ai les objectifs stockés dans toAddArray et dans une boucle, ils vont créer ou mis à jour en fonction du nombre de buts du site actuel. Je crée d'abord le lot, puis je boucle en ajoutant les objectifs au lot (j'ai omis le code de l'objectif car les écritures n'échouent pas), puis j'exécute le lot.API de gestion Google Analytics Le package Java ne fonctionne pas comme indisponible

code Je cours

 //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(); 

Ce qui se passe

Quand je courais ce que je reçois les callbacks pour les 10 buts, le premier 5-6 reviennent avec succès et la les 4 derniers reviendront avec la limite de taux dépassée. À ma connaissance, le but du système de traitement par lots est de compiler les URL en une seule fois et de les envoyer toutes en même temps pour diminuer la charge sur le serveur.

Ce système semble fonctionner plus comme un système de files d'attente qui a sa place mais ne m'aide pas à diminuer le nombre d'écritures avec lesquelles je travaille. Depuis que j'écris 10 buts à 1000 ou alors des sites Web je regarde 10k écrit un jour. Avec une limite de 500 écritures par projet par jour ce qui en fait une chose de 20 jours. Si je n'ai qu'une écriture par profil ce serait un truc de 2 jours. J'ai demandé à l'équipe Google d'augmenter mes quotas d'API et d'ajouter la mise à jour bêta de l'objectif à 5 autres projets pour pouvoir changer de clés, mais en attendant, je veux savoir s'il y a quelque chose que je peux faire pour obtenir le batching travailler comme une seule écriture.

Répondre

0

Les gains de performances à l'aide de la fonction de traitement par lots ne sont autorisés que pour les autorisations (user management docs).

Je crois que vous avez raison lorsque vous dites que les appels sont faits comme si vous les aviez fait un à la fois. Vous obtenez probablement des erreurs de quota lorsque vous envoyez 10 appels à la fois. Je devine que c'est le 1.5qps per Account ID write limit

Si vous avez besoin de faire que beaucoup vous devrez peut-être écrit à implement exponential backoff.

J'espère que cette aide, et bonne chance :)

+0

Merci pour la réponse Josh. Dans le passé, j'avais sonné les hits moi-même avec ma propre "file d'attente", puis j'ai simplement mis le processus en veille périodiquement pour ne pas atteindre les limites de l'API. [ici] (https://developers.google.com/analytics/devguides/config/mgmt/v3/batching) est un lien vers la page "Best Practices" et détaille comment cela peut être utilisé pour de nombreuses opérations et est destiné à diminuer le nombre de visites à l'API. Il semble que cette classe Java n'utilise pas réellement la file d'attente pour générer les requêtes HTTP et les regrouper. Je vais le faire moi-même et tirer la demande. –