2010-12-04 6 views
2

Possible en double:
Fetching a random record from the Google App Engine Datastore?GQL aléatoire Enregistrement

Comment puis-je choisir efficacement un enregistrement de base de données aléatoire en utilisant GQL?

Par exemple. J'ai un modèle de devis et je dois choisir une citation aléatoire à chaque fois. La question découle de ce que je comprends que l'attribut ID ne peut pas être garanti d'être auto-incrémenté avec chaque insertion dans le serveur de production.

Répondre

4

Les identifiants générés automatiquement sont garantis uniques, mais pas séquentiels ou strictement croissants.

Il existe alreadymanyquestions à ce sujet sur stackoverflow, et dans les groupes.

Il existe plusieurs solutions communes:

  • générer et stocker un nombre aléatoire sur vos entités que vous les créez, ramasser ensuite un nombre aléatoire et regarder (via une requête) pour le placard dossier (s) à lui.
  • Implémentez un mécanisme pour vous assurer que vos ID d'entité sont "densément" remplis, puis récupérez dans la plage connue à l'aide des clés.
  • Générer périodiquement des listes aléatoires de les entités et retourner les entités de ces listes. Cela peut prendre la forme d'une pile dont les entités sont ignorées ou les listes réelles renvoyées.

Ce que vous ne pas voulez faire est de choisir un décalage aléatoire. Le décalage est très inefficace car le magasin de données doit toujours analyser toutes les entités ignorées.

Questions connexes