Pregunta

Estoy usando GAE/Java con Objectify y estoy tratando de encontrar la manera más rápida de verificar si un objeto determinado existe en el almacén de datos, dada la clave.Lo que estoy haciendo ahora es .get(key) con @Cached activado, pero de cualquier manera aún recupera el objeto completo, lo cual es innecesario.

¿Alguna idea sobre cómo hacer esto con un índice único?También estaba pensando en una consulta de solo claves, pero veo (en el panel de estado del sistema ) que la latencia es mucho más que una get.

¿Fue útil?

Solución

¿Alguna idea sobre cómo hacer esto con un índice solo golpe?También estaba pensando en una consulta de solo llaves

Una consulta de solo claves es la única forma de obtener un resultado de solo índice.Si es más rápido que get depende del tamaño de su entidad y del tamaño de su índice.En un ejemplo trivial, obtengo alrededor de 8 ms para una obtención y 13 ms para una consulta.Puedes utilizar AppStats para determinar cuál es más barato para ti con datos reales.

Otros consejos

Sólo realice get () con la caché de encendido. A menos que tenga una gran cantidad de lógica en un método caro @PostLoad, debería ser significativamente más barato para recuperar los datos de Memcache de lo que es ir todo el camino hasta el almacén de datos, incluso para una consulta de solo claves. La memoria caché es su amigo.

Como nota al margen, esto suena como la optimización prematura. Construir su aplicación utilizando el código conveniente más, Appstats a continuación, ejecutar y averiguar si los costes reales están en su aplicación. Es probable que encuentres que las partes caros no son lo que piensan.

Un claves sólo consulta con un filtro en __key__ será sustancialmente más rápido que las consultas de punto de referencia en el panel de estado. Si es o no es más rápido que simplemente ir a buscar la entidad no estoy seguro - prueba y se deja en contacto con nosotros

Puede probar unas teclas única consulta de Objectify como esto:

public static boolean objectExists(String id, Class<?> objectClass) {
  return OfyService.ofy().load().filterKey(Key.create(objectClass, id)).keys().first() != null;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top