Im ejecutar una consulta y actualmente se está volviendo 1400 resultados y debido a esto que estoy recibiendo la siguiente advertencia en el archivo de registro:Para Google App Engine (java), ¿cómo configuro y uso el tamaño de fragmento en FetchOptions?
com.google.appengine.api.datastore.QueryResultsSourceImpl logChunkSizeWarning: esta consulta no tiene un tamaño de fragmento establecido en FetchOptions y ha devuelto más de 1000 resultados. Si los conjuntos de resultados de de este tamaño son comunes para esta consulta, considere establecer un tamaño de fragmento en para mejorar el rendimiento.
No puedo encontrar ningún ejemplo de cómo implementar esto realmente, aquí hay una pregunta sobre python, pero como estoy usando Java y no entiendo Python, me cuesta traducirlo.
También esta consulta (abajo) está ejecutando 17226cpu_ms, que se siente como demasiado tiempo, ni siquiera puedo imaginar qué pasaría si dijera 5000 contactos y necesitara buscarlos en el lado del cliente (como lo hace ! con contactos Googlemail)
El código que tengo es:
int index=0;
int numcontacts=0;
String[][] DetailList;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query query = pm.newQuery(Contact.class, "AdminID == AID");
query.declareParameters("Long AID");
query.setOrdering("Name asc");
List<Contact> Contacts = (List<Contact>) query.execute(AdminID);
numcontacts=Contacts.size();
DetailList=new String[numcontacts][5];
for (Contact contact : Contacts)
{
DetailList[index][0]=contact.getID().toString();
DetailList[index][1]=Encode.EncodeString(contact.getName());
index++;
}
} finally {
pm.close();
}
return (DetailList);
me encontré con los siguientes dos entradas de aquí:
- google app engine chunkSize & prefetchSize - where can I read details on it?
- GAE/J Low-level API: FetchOptions usage
pero tampoco entra realmente ningún detalle acerca de cómo implementar o usar estas opciones. Supongo que es un proceso del lado del servidor, y supongo que está destinado a configurar algún tipo de bucle para tomar los pedazos un trozo a la vez, pero ¿cómo puedo hacer eso?
- ¿Llamo la consulta dentro de un bucle?
- ¿Cómo sé cuántas veces para hacer un bucle?
- ¿Acabo de verificar el primer fragmento que se devuelve con un número de entradas inferior al tamaño del fragmento?
¿Cómo voy a tratar de descubrir cosas como esta sin un ejemplo real a seguir? Me parece que otras personas aquí parecen "solo saber" cómo hacerlo ...!
Lo siento si no estoy haciendo las preguntas de la manera correcta o simplemente soy un novato oscuro sobre esto, pero no sé a dónde más recurrir para resolver esto!
No estoy seguro de cómo reformular mi pregunta, así que solo voy a responder a su comentario. ¿Debo sustituir simplemente mi línea de código: "List Contacts = (List ) query.execute (AdminID);" con tus dos líneas de código? Si es así, ¿puedes ayudarme cambiando tu código para que coincida con las variables en el mío?como no puedo resolverlo. Probé alrededor de 20 combinaciones de mis variables, pero nada tiene sentido, y es por eso que formulé las preguntas anteriores ... Una cosa que he golpeado un par de veces parece estar relacionada con el hecho de que mi "Consulta" "arriba se importa como" javax.jdo.Query; " –
johnvdenley
¿Alguien puede ayudarme con esto ya que ahora me está causando un problema? Ya no puedo solucionarlo. – johnvdenley