теоретически, я хочу, чтобы в моей модели User было 100 000 объектов:
Я бы хотел реализовать свойство ID, которое увеличивается с каждым новым объектом.
Цель состоит в том, чтобы я мог выполнять запросы типа «получить пользователя с идентификаторами от 200 до 300». Вроде как разделение 10000 сущностей на 1000 читаемых страниц по 100 сущностей каждая.
Я слышал, что свойство ID из App Engine не гарантирует, что оно будет увеличиваться постепенно.
Так как мне реализовать свой собственный инкрементный идентификатор?
Одна из моих идей - использовать memcache. Добавьте счетчик в memcache, который увеличивается каждый раз, когда вставляется новый объект.
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 )
что вы, ребята, думаете?
дополнительный вопрос: если одновременно зарегистрируются 10 пользователей, это испортит счетчик memcache?