2015-10-09 3 views
2

Я пытаюсь выяснить, какая максимальная длина для AppEngine key name находится в Java API.Понимание максимальной длины имени ключа AppEngine в Java API

Этот вопрос был задан в гораздо меньшей глубине, перед тем:

How long (max characters) can a datastore entity key_name be? Is it bad to haver very long key_names?

и получил две противоречащие друг другу ответы (с той, которая кажется меньше доверия мне быть принятый один ...)

@ryan смог предоставить ссылки на соответствующий источник API Python в his answer, и я пытался найти что-то подобное в Java API.

Но ни Key.java, ни KeyFactory.java, ни KeyTranslator.java, кажется, соблюдение каких-либо ограничений на name свойстве ключа. Итак, если есть предел, он реализуется в другом месте. KeyTranslator называет com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName(), который может быть место, где реализуется предел, но, к сожалению, я не могу найти источник для этого класса в любом месте ...

В частности, я хотел бы знать:

  • ли ограничение 500 символов ограничивает жесткую лимиту, определенную для имен ключей где-то в бэкэнд, или это просто рекомендация, чтобы было достаточным, чтобы убедиться, что полная ключевая строка никогда не превышает 1500-byte limit of a short text property (длинные текстовые свойства с большим количеством байтов не могут быть проиндексированы , если я правильно понимаю).
  • Если это жесткое ограничение:

    • ли 500 символов или 500 байт (т.е. длина после некоторого кодирования)?
    • Являются ли полные 500 байтов/символов доступными для имени ключа или других ключевых компонентов (рода, родителя, app-id, ...) вычитаются из этого числа?
  • Если это рекомендация:

    • Достаточно ли во всех случаях?
    • Какое максимальное значение я могу использовать, если все ключи расположены в корне моего приложения, а вид - только одна буква? Другими словами: существует ли формула, которую я могу использовать для вычисления предела реального с учетом других ключевых компонентов?
  • Наконец, если я просто пытаюсь измерить этот предел, пытаясь хранения ключей увеличения длины, пока я не получить исключение, я смогу рассчитывать на пределе, что я считаю, если я только создавать ключи с идентичными пути предков и одинаковые длины в одном приложении? Или есть другие компоненты переменной длины для ключа, который может быть добавлен, и в некоторых случаях уменьшить доступную длину имени ключа? Должно ли быть одинаковым для разработчиков и производственных серверов?

ответ

4

Datastore реализует всю свою проверку в бэкэнд (поскольку это предотвращает успешное выполнение операций на одном клиенте в другом).Ключи Datastore имеют following restrictions:

  • Ключ может иметь не более 100 элементов пути (это вид, пары имя/ID)
  • Каждый вид может быть не более 1500 байт.
  • Каждое имя может содержать не более 1500 байт.

Предел 500 символов был конвертирован в 1500 байт. Таким образом, места, где вы видели ограничение на 500 символов раньше (например, ответ @ ryan в связанном вопросе), теперь составляют 1500 байт. Строки кодируются с использованием UTF-8.

Важно, чтобы ответить на некоторые особенности из вашего вопроса:

ли полные 500 байт/символов для имени ключа или делать другую ключевой-компоненту (вид, родитель, приложение-идентификатор,. ..) вычесть из этого числа?

, ограничение по 1500 байт за поле.

+0

Благодарим за подробный ответ! Это отличная новость! Всегда хорошо слышать от источника. Если бы только я смог связаться с кем-то в группе биллинга Android ...;) Помните, если я укажу вам на другой (старый, но все еще релевантный) вопрос о том, что я считаю «ошибкой» (или, по крайней мере, ненадежной предложение) в официальной документации? Я тем временем нашел обход, но это может вас заинтересовать или человека в вашей команде, который работал над этой темой: http://stackoverflow.com/questions/18264338/google-appengine-server-instance-clock -синхронизация –

+0

О, ничего себе! Просто нашел что-то еще важное в связанном источнике: 'Соответствие имени регулярного выражения '__. * __' зарезервировано/доступно только для чтения' Полезно знать! –