IM Exécution d'une requête et cela renvoie actuellement 1400 résultats et à cause de cela, je reçois l'avertissement suivant dans le fichier journal:
com.google.appengine.api.datastore.QueryResultsSourceImpl logchunksizewarning: cette requête n'a pas de taille de morceau dans Fetchoptions et revint plus de 1000 résultats. Si des résultats de résultats de Cette taille est courante pour cette requête, envisagez de définir une taille de morceau à améliorer les performances. P> BlockQuote>
Je ne trouve aucun exemples sur la manière de la mettre en œuvre, il y a une question sur Python, mais comme je suis en train d'utiliser Java et que je ne comprends pas Python, je me lance de le traduire. < / p>
Cette requête (ci-dessous) prend aussi 17226cpu_ms à exécuter, ce qui se sent trop longtemps, je ne peux même pas imaginer ce qui se passerait si j'avais 5000 contacts et si j'avais besoin de chercher à travers eux du côté du client (comme Vous faites avec des contacts Googlemail!) P>
Le code que j'ai est: p>
xxx pré> J'ai trouvé les deux entrées suivantes ici: p>
- Google App Engine ChunkSize & PréfetchSize - Où puis-je lire des détails sur elle? li>
- API de faible niveau de basse niveau: utilisation des fetchoptions < / li> ul>
mais non plus dans aucun détail sur la manière de mettre en œuvre ou d'utiliser ces options. Je suppose que son processus côté serveur et je devine que vous devez que vous êtes censé configurer une sorte de boucle pour attraper les morceaux un morceau à la fois, mais comment puis-je le faire? P>
- Est-ce que j'appelle la requête dans une boucle? Li>
- Comment puis-je savoir combien de fois à boucle? Li>
- Est-ce que je viens de vérifier le premier chunk qui revient avec moins de la taille du morceau Nombre d'entrées? LI> ul>
Comment suis-je censé continuer à trouver des choses comme celles-ci sans un exemple réel à suivre? Il me semble que d'autres personnes ici semblent "savoir simplement" comment le faire ..! P>
Désolé si je ne pose pas la question de la bonne façon ou que je ne suis qu'être un nouveau débutant à ce sujet, mais je ne sais pas où se tourner d'autre pour comprendre cela! p> p>
3 Réponses :
C'est comme ça que j'applique bien sûr que les chiffres peuvent être modifiés. (100). P> Si ma réponse n'est pas ce que vous recherchez, alors vous êtes invité à reformuler votre question (modifier). P> Au fait que je suis le celui qui a écrit la première question liée. p> p> fetchoptions code>, par rapport à votre code exemple, vous devrez peut-être modifier un bit:
Je ne sais pas comment reformuler ma question, alors je vais juste répondre à votre commentaire. Suis-je censé simplement remplacer ma ligne de code unique: "Liste
Quelqu'un peut-il m'aider avec cela comme il me causent maintenant un problème que je ne peux plus contourner de contournement!
rencontrer le même problème et le dernier commentaire était d'un mois il y a un mois, voici ce que j'ai découvert sur la requête de jeu de données lourdes.
Je suppose que je vais utiliser la technique "curseur de requête" après avoir lu ces lignes Le Google Docs Article (celui de Python mentionné par la voie): P>
Cet article a été écrit pour SDK version 1.1.7. Comme la libération 1.3.1, Curseurs de requête ( Java | python ) a remplacé les techniques décrites ci-dessous et sont maintenant la méthode recommandée de pagination à travers le grand jeux de données. P> blockquote>
dans les documents Google sur " curseur de requête a> ". La première ligne du doc donne précisément pourquoi la nécessité de curseur em>: p>
Les curseurs de requête permettent à une application d'effectuer une requête et de récupérer un lot de résultats, puis récupérer des résultats supplémentaires pour la même requête dans un Web suivante Demande Sans la surcharge d'une requête offset forte>. P> BlockQuote>
La documentation fournit également un exemple
Java fort> d'un servlet à l'aide de la technique du curseur. Il y a un conseil pour générer un curseur sûr pour le client. Enfin, les limitations de curseur em> sont exposées. P> espère que cela vous donne une conduite pour résoudre votre problème. P>
petit rappel sur la plage et Décalage < / forte>, très impactant sur la performance si oublié (et je l'ai fait ^^): P>
Le décalage de départ a des implications pour la performance: le magasin de données doit récupérer puis jeter tous les résultats avant le début décalage. Par exemple, une requête avec une plage de 5, 10 récupération dix résultats de la banque de données, retacte les cinq premiers et retourne la cinq restants à l'application. P> BlockQuote>
Edit: En fonction de la recherche avec JDO, je suis resté à la recherche d'un moyen de permettre à mon code précédent de charger plus de 1000 résultat dans une seule requête. Donc, si vous utilisez aussi JDO aussi, j'ai trouvé cet ancien problème : p>
xxx pré> p>
Si vous utilisez directement le magasin de données directement, sans em> JDO, vous feriez alors quelque chose comme ce qui suit pour définir la taille du morceau lorsque vous êtes itération via les données: Query query = new Query("entityname");
PreparedQuery preparedQuery = dataStore.prepare(query);
// the 200 should be less than 1000
FetchOptions options = FetchOptions.Builder.withChunkSize(200);
for (Entity result : preparedQuery.asIterable(options)) {
...
}
Je déteste le dire, mais je n'ai jamais trouvé comment faire cela, je viens d'avoir un appel à la clientèle pour dire que ce problème a de nouveau levé sa tête laide ... ils rassemblent 2044 enregistrements de données du moteur App et je ' m Obtenez l'erreur à nouveau pour définir la taille du morceau pour éviter le problème ... essentiellement, je reçois un délai d'attente sur le chargement des données et je ne comprends toujours pas vraiment comment résoudre le problème, pour moi c'est le "... «Bit dans votre boucle au-dessus que je ne sais pas comment gérer. Est-ce que le datastore renvoie les résultats dans 200 morceaux, puis-je les recombiner avant de les envoyer au client?
Oui, je les recombinerais @johnvdenley. Vous rompez la requête de sorte qu'il finit plus vite, puis combinant les résultats pour égaler la liste complète.