Каков наилучший способ создания действующего целочисленного идентификатора в хранилище данных AppEngine? - PullRequest
1 голос
/ 15 апреля 2010

По разным причинам мне нужен уникальный действующий целочисленный идентификатор для моих сущностей, хранящийся в Google AppEngine. Сгенерированный автоматически тип ключа имеет такое поведение, но он не начинается с 1 (или 0) и не гарантирует, что сгенерированная целочисленная часть будет происходить из непрерывной последовательности.

Как лучше всего реализовать это в AppEngine? Есть ли поддержка со стороны системы хранения? Чтобы добавить к сложности, мне может потребоваться сделать это для сущностей из разных групп сущностей, то есть я не могу просто получить самый высокий идентификатор прямо сейчас и сохранить объект со следующим идентификатором в транзакции. Может быть, memcache будет подходить? ..

Edit:

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

1 Ответ

0 голосов
/ 15 апреля 2010

Если бы вы могли жить без целочисленной части, попробуйте модуль uuid (из стандартная библиотека): http://docs.python.org/library/uuid.html

Это обычно дает строку из 36 символов, хотя, может быть, это далеко от того, что вам нужно. Но это уникально.

...