в теории, я хочу иметь 100000 сущностей в моей модели пользователя:Google App Engine GQL вопрос запрос
Я хотел бы реализовать свойство ID Инкремента с каждым новым лицом быть на место.
Целью является то, что я могу делать запросы типа «получить пользователя с идентификаторами от 200 до 300». Это похоже на разделение 10000 объектов на 1000 читаемых страниц по 100 объектов каждый.
Я слышал, что свойство ID из App Engine не гарантирует, что оно будет увеличиваться постепенно.
Как я могу реализовать свой собственный инкрементный ID?
Одна из моих идей - использовать 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?
Зачем вам требуется, чтобы идентификаторы были последовательными? Как вы будете обрабатывать пользователей, которые хотят удалить свои учетные записи? Разве это не испортит ваш пейджинг? –
thx для ввода – fooyee