en théorie, je veux avoir 100.000 personnes dans mon modèle d'utilisateur:Google App Engine GQL requête question
Je voudrais mettre en œuvre une propriété d'ID qui incrémente à chaque nouvelle entité mise.
Le but est que je puisse faire des requêtes comme "obtenir un utilisateur avec des ID de 200 à 300". Un peu comme séparer les 10000 entités en 1000 pages lisibles de 100 entités chacune.
J'ai entendu dire que la propriété ID d'App Engine ne garantit pas qu'elle augmente de manière incrémentielle.
Alors, comment puis-je implémenter mon propre identifiant d'incrémentation?
Une de mes idées est d'utiliser memcache. Ajoutez un compteur dans memcache qui augmente chaque fois qu'une nouvelle entité est insérée.
class User(db.Model):
nickname = db.StringProperty()
my_id = db.IntegerProperty()
# Steps to add a new user entity:
# Step 1: check memcache
counter = memcache.get("global_counter")
# Step 2: increment counter
counter = counter + 1
# Step 3: add user entity
User(nickname="tommy",my_id=counter).put()
# Step 4: replace incremented counter
memcache.replace(key="global_counter",value=counter)
# todo: create a cron job which periodically takes the memcached global_counter and
# store it into the datastore as a backup (in case memcache gets flushed)
Qu'en pensez-vous?
question supplémentaire: si 10 utilisateurs s'enregistrent en même temps, va-t-il gâcher le compteur memcache?
Pourquoi avez-vous besoin que les identifiants soient séquentiels? Comment allez-vous gérer les utilisateurs souhaitant voir leurs comptes supprimés? Cela ne gâchera-t-il pas votre pagination? –
thx pour l'entrée – fooyee