Quels types de compromis recherchez-vous? Si vous êtes prêt à accepter un faible impact sur l'insertion de ces entités, vous pouvez créer une solution pour en obtenir très rapidement.
Voici ce que vous devez faire:
Lorsque vous insérez vos entités, spécifiez la clé. Vous voulez donner des clés à vos entités dans l'ordre, en commençant par 1 et en remontant à partir de là. (Cela demandera quelques efforts, car le moteur de l'application n'a pas d'auto-incrémentation(), donc vous aurez besoin de garder trace du dernier id que vous avez utilisé dans une autre entité, appelons-le IdGenerator)
Maintenant, quand vous avez besoin N entités aléatoires, génèrent N nombres aléatoires entre 1 et quel que soit le dernier identifiant que vous avez généré (votre IdGenerator le sait). Vous pouvez ensuite effectuer un traitement par lots à l'aide des touches N, qui ne nécessitent qu'un seul passage dans le magasin de données et seront plus rapides qu'une requête, car les clés sont généralement plus rapides que les requêtes, AFAIK.
Cette méthode ne nécessite traiter quelques détails gênants:
- Votre IdGenerator pourrait devenir un goulot d'étranglement si vous insérez beaucoup de ces articles à la volée (plus de quelques seconde), ce qui nécessiterait une sorte d'implémentation IdGenerator partitionnée.Si toutes ces données sont préchargées ou si le volume n'est pas élevé, cela vous sera facile.
- Vous trouverez peut-être que certains ID ne sont plus associés à une entité, car vous l'avez supprimée ou parce qu'un put() a échoué quelque part. Si cela se produit, vous devrez attraper une autre entité aléatoire. (Si vous voulez avoir envie et réduire les chances de cela, vous pouvez rendre cet Id disponible à l'IdGenerator pour réutiliser "remplir les trous")
Donc la question se résume à quelle vitesse vous avez besoin de ces N les éléments et la fréquence à laquelle vous les ajouterez et les supprimerez, et si un peu plus de complexité justifie cette amélioration des performances.
J'ai créé un problème pour cela, vous pouvez l'étoile pour aider à réparer: https://code.google.com/p/googleappengine/issues/detail?id=9044 –