Vérifier si l'Entité existe dans google app engine banque de données.
Quel est le meilleur/le plus rapide moyen de vérifier si une Entité existe dans google app engine banque de données? Pour l'instant, je vais essayer d'obtenir l'entité par clé et vérifier si le get() renvoie une erreur.
Je ne connais pas le processus d'obtention d'une Entité de la banque. Est-il un moyen plus rapide pour faire uniquement cette case?
- l'obtention d'une entité par la touche jamais y retourner une erreur, elle renvoie None.
- En java
get
déclenche une exception lorsque l'entité n'est pas trouvé: developers.google.com/appengine/docs/java/javadoc/com/google/... - ok ne le savais pas.
- Je ne comprends pas trop la question. Si vous avez déjà une clé, comment venir à votre entité peut ne pas exister? Sauf si vous êtes en utilisant des ID/nom ou d'une autre requête simultanées supprime la même entité pendant ce temps. Ce que je dis, c'est que, vous pourriez voulez regarder votre problème dans une optique différente, par exemple, qu'est-ce exactement que vous voulez accomplir sur une image plus grande échelle?
- Je suis de la génération de la clé selon certains paramètres. Pour des exemples, si j'ai un utilisateur, je peux créer une Entité pour les propriétés de l'utilisateur à l'aide de la user_id en tant que clé. uniquement à l'aide de KeyFactory.createKey(EntityName, id);
Vous devez vous connecter pour publier un commentaire.
com.google.appengine.api
a été dépréciée en faveur de l'App Engine GCS client.Avez-vous songé à l'aide d'une requête? Deviner et vérifier n'est pas une manière évolutive à savoir d'une entité existe dans une banque de données. Vous pouvez créer une requête pour récupérer les entités de la banque de données qui répondent à un ensemble de conditions:
https://developers.google.com/appengine/docs/java/datastore/queries
EDIT:
Ce sujet de la clé de la seule requête? Touche uniquement les requêtes de courir plus vite que les requêtes qui renvoient à des entités. Pour renvoyer uniquement les touches, utilisez la Requête.setKeysOnly() la méthode.
Source: [1]: http://groups.google.com/group/google-appengine-java/browse_thread/thread/b1d1bb69f0635d46/0e2ba938fad3a543?pli=1
Ce que vous avez proposé serait en effet le moyen le plus rapide pour savoir si votre entité existe. La seule chose que vous ralentir est le temps qu'il faut chercher et désérialiser votre entité. Si votre entité est grand, cela peut vous ralentir.
SI cette action (la vérification de l'existence) est un goulot d'étranglement majeur pour vous et vous avez de grandes entités, vous pouvez rouler votre propre système de contrôle à l'aide de deux entités: d'abord vous devez avoir votre entité existante avec les données, et une deuxième entité que ce soit les magasins de la référence à l'entité réelle, ou peut-être un vide entité où la clé est juste une variation sur l'entité d'origine de la clé que vous pouvez calculer. Vous pouvez vérifier l'existence rapidement à l'aide de la 2e entité, et de récupérer la première entité que si les données sont nécessaires.
Le mieux je pense serait juste pour la conception de vos clés tels, ils vous le savez il n'y aurait pas de doublons, ou que vos opérations sont la quantité, de sorte que même si une ancienne entité a été remplacé, il ne serait pas question.
Vous pouvez récupérer à l'aide d'un
List<Key>
ne contenant qu'une seuleKey
, cette méthode renvoie uneMap<Key, Entity>
qui vous permet de vérifier s'il contient une valeur réelle ounull
, par exemple:En général mais je pense que ce serait plus simple pour envelopper le
get()
dans un try/catch qui renvoienull
si leEntityNotFoundException
est pris.