По разным причинам мне нужен уникальный текущий целочисленный идентификатор для моих сущностей, хранящихся в Google AppEngine. Автоматически сгенерированный тип ключа имеет такое поведение, но он не начинается с 1 (или 0) и не гарантирует, что сгенерированная целая часть будет исходить из непрерывной последовательности.
Как лучше всего реализовать это в AppEngine? Есть ли поддержка со стороны СХД? Чтобы добавить сложности, мне может понадобиться сделать это для сущностей из разных групп сущностей, а это означает, что я не могу просто получить самый высокий идентификатор прямо сейчас и сохранить сущность со следующим идентификатором в транзакции. Может быть, memcache — это то, что нужно?
Изменить:
Я еще не реализовал это, но чтобы прояснить идею memcache. Я знаю, что memcache ненадежен, но на практике он, вероятно, не будет терять данные «слишком часто», чтобы снизить производительность. По сути, у меня была бы запись memcache для последнего использованного идентификатора, обновляющая ее (каким-то образом атомарно) всякий раз, когда я создаю новый объект и использую этот идентификатор. В случае, если memcache не имеет значения для этой записи, я бы получил самый высокий идентификатор, выполнив запрос к моим объектам, отсортированным по идентификатору, и обновил memcache (если только это еще не сделал кто-то другой). Единственная проблема, которую я вижу с этим прямо сейчас, была бы атомарностью операции в целом, если бы сохранение моего нового объекта также было частью транзакции. Мысли..?