Если у меня уже есть уникальный идентификатор, должен ли я использовать его в качестве ключа хранилища данных? - PullRequest
1 голос
/ 08 февраля 2012

Я создаю приложение App Engine, которое использует OAuth для получения данных пользователя из внешнего API.Пользователь назначает числовой идентификатор внешним API.Я рассматривал вопрос о предоставлении моей модели User поля идентификатора, в котором будет храниться копия идентификатора внешнего пользователя.Потом я вспомнил, что записям хранилища данных могут быть присвоены ключи с назначенным вручную числовым идентификатором.

external_id = int(api_response['user']['id'])
handmade_key = db.Key.from_path('User', external_id)

Путем ручного создания ключа перед созданием записи я смог бы получить запись, используя только этот идентификатор.

user = User.get_by_id(external_id)

Однако я понимаю, что мне нужновыделить весь диапазон идентификаторов, которые может использовать API.

allocate_ids(User, 10000)

Мой первый вопрос:когда я должен вызвать allocate_ids?Похоже, мне нужно будет выполнить его только один раз, но если он будет выполняться каждый раз, когда экземпляр моего приложения запускается, это повлияет на производительность?Если я никогда не помещаю сущности пользователя без ключа, созданного вручную, нужно ли мне использовать allocate_ids?

Второй вопрос:я сумасшедший !?Делать это обычным способом не намного труднее

user = User.all().filter('external_id =', external_id)

Стоит ли выделять идентификаторы, чтобы избежать этого запроса хранилища данных?

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Есть что-нибудь, что мешает вам превратить внешний идентификатор в строку и использовать его в качестве имени ключа?

2 голосов
/ 08 февраля 2012

Вам не нужно allocate_ids, если вы всегда строите ключи так, как вы описываете. Это необходимо только в том случае, если вы ожидаете, что также позволит хранилищу данных создавать свои собственные автоматически увеличивающиеся числовые идентификаторы.

И да, вам почти всегда лучше с меньшим количеством полей и индексов, поэтому создайте Ключ, используя значение внешнего уникального идентификатора, как вы описываете.

...