2010-09-12 14 views
3

Assez simple, dans mon application AppEngine, j'ai plus d'un million d'entités d'un même type, quelle est la meilleure façon d'en choisir une au hasard?Récupérer une entité aléatoire à partir du magasin de données

+0

double possible de [Comment obtenir quelque chose au hasard dans datastore (AppEngine)?] (Http://stackoverflow.com/questions/3450926/how-to-get-something-random-in-datastore-appengine) –

+0

duplication possible de [Récupérer un enregistrement aléatoire du magasin de données Google App Engine?] (http://stackoverflow.com/questions/3002999/fetching-a-ra ndom-record-from-google-app-engine-datastore) –

Répondre

-1

Peut-être une solution, mais je ne sais pas si c'est le meilleur :)

import random 
from google.appengine.ext import db 
from google.appengine.api import memcache 

DATA_KEY = "models/keys/random" 

def get_data(): 
    data = memcache.get (DATA_KEY) 
    if data is None: 
     offset = random.randint (1, 1000000) 
     data = self.MyModel.all (keys_only=True).fetch (100, offset) 
     memcache.add (DATA_KEY, data, 60) 

    entity_key = random.choice (data) 
    return db.get (entity_key) 
+1

La récupération prendra plus de temps à mesure que la taille du décalage augmente. Vous devriez vous attendre à une exception DeadlineExceeded sur presque toutes les requêtes avec ce code. – geoffspear