Question

J'utilise GAE / Java avec Objectify, et je suis en train de trouver le meilleur moyen de vérifier si un objet donné existe dans le datastore, étant donné la clé. Ce que je fais est en ce moment .get(key) avec @Cached, mais de toute façon qui récupère toujours l'objet entier, ce qui est inutile.

Toutes les idées sur la façon de le faire avec un seul indice a frappé? Je pensais aussi à une seule requête clés, mais je vois (le l'état du système tableau de bord ) que le temps d'attente est bien plus qu'un get.

Était-ce utile?

La solution

  

Toutes les idées sur la façon de le faire avec un   index seulement frappé? Je pensais aussi   une seule requête clés

Touches-seulement Une requête est la seule façon d'obtenir un index seulement frappé. Que ce soit plus rapide qu'un get dépend de la taille de votre entité et la taille de votre index. Dans un exemple trivial, je reçois environ 8 ms pour un get et 13ms pour une requête. Vous pouvez utiliser Appstats pour savoir qui est moins cher pour vous avec des données réelles.

Autres conseils

Il suffit de réaliser un get () avec le cache activé. Sauf si vous avez beaucoup de logique coûteuse dans une méthode de @PostLoad, il devrait être beaucoup moins cher pour récupérer les données de memcache que d'aller tout le chemin vers le datastore même pour une clé exclusivement requête. Le cache est votre ami.

Comme une note de côté, cela ressemble à l'optimisation prématurée. Construisez votre application en utilisant le code plus pratique, puis exécutez Appstats et savoir où les coûts réels sont dans votre application. Vous constaterez probablement que les pièces coûteuses ne sont pas ce que vous pensez.

touches A seule requête avec un filtre sur __key__ sera sensiblement plus rapide que les requêtes Validé sur le tableau de bord de l'état. Si oui ou non il est plus rapide que tout simplement aller chercher l'entité que je ne suis pas sûr - l'essayer et laissez-nous savoir

Vous pouvez essayer une des clés de requête ne Objectify comme ceci:

public static boolean objectExists(String id, Class<?> objectClass) {
  return OfyService.ofy().load().filterKey(Key.create(objectClass, id)).keys().first() != null;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top