Какова стоимость производительности именованных или предварительно сгенерированных ключей в Google App Engine? - PullRequest
2 голосов
/ 26 ноября 2009

Если вы использовали именованные ключи в Google App Engine, это потребует дополнительных затрат? Другими словами, стоит ли создавать новую сущность с именованным ключом, а не со случайно сгенерированным идентификатором?

В аналогичном рассуждении отмечу, что вы можете попросить Google App Engine предоставить вам набор ключей, которые не будут использоваться Google App Engine в качестве автоматически генерируемых ключей? Приведет ли создание большого количества этих ключей к снижению производительности?

Эти вопросы волнуют меня по следующей причине. Допустим, Google App Engine пытается сохранить сущность A, и поэтому он создает ключ для A. Интуитивно кажется, что при случайном генерировании нового ключа Google App Engine необходимо сначала проверить, был ли ключ уже существует. Если ключ уже существует, Google App Engine может потребоваться создать другой случайно сгенерированный новый ключ. Он будет продолжать делать это до тех пор, пока ему не удастся сгенерировать уникальный новый ключ. Затем он назначил бы этот ключ сущности А. Хорошо, это хорошо и хорошо.

Моя проблема с этим, кажется, подразумевает, что ключи вызывают некоторую блокировку уровня приложения? Это было бы необходимо, когда Google App Engine проверяет, существует ли случайно сгенерированный ключ. Это не может быть правильно, так как это вообще не масштабируется? Что плохого в моих рассуждениях?

Итак, так как это было долго, я повторю свои 3 вопроса:

  1. Создает ли Google App Engine блокировку на уровне приложения при создании новых ключей?
  2. Несут ли именованные ключи какие-либо дополнительные расходы по сравнению с автоматически генерируемыми ключами? Если да, то какая стоимость (постоянная, линейная, экспоненциальная, ...)?
  3. Вызывает ли запрос в механизме приложения ключей, которые ядро ​​приложения не использует, приводит к снижению производительности при создании ключа? Если это так, сколько будет стоить это?

1 Ответ

4 голосов
/ 27 ноября 2009

Нет встроенного наказания за использование имени ключа вместо автоматически сгенерированного идентификатора, за исключением накладных расходов (потенциально) более длинного ключа на объекте и любых ReferenceProperties, которые ссылаются на него.

В некоторых случаях фактически использование автоматически назначаемых идентификаторов может привести к снижению производительности: если вы вставляете новые объекты с очень высокой скоростью (несколько сотен в секунду), поскольку все новые объекты имеют идентификаторы в одном и том же диапазоне, все они будут записаны на один и тот же планшет Bigtable, что может привести к конфликтам и увеличению времени ожидания. Тем не менее, подавляющее большинство приложений никогда не должны беспокоиться об этом.

Нет никакого влияния на производительность при выделении столько идентификаторов, сколько вы хотите - App Engine просто увеличивает счетчик идентификаторов на количество, которое вы запрашиваете. (Это упрощение, но в целом точное).

В ответ на ваши проблемы App Engine не генерирует ключи случайным образом. Он либо использует автоматически распределяемый идентификатор, который распределяется с помощью счетчика и, таким образом, гарантированно уникален, либо использует предоставленный вами ключ. Итак, в ответ на ваши последние 3 пункта:

  1. Номер
  2. Только в хранилище для (потенциально) более длинных ключей
  3. Нет, и стоимость примерно равна O (1) независимо от того, сколько вы просите.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...