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