Как избежать ненужных больших идентификаторов в App Engine - PullRequest
2 голосов
/ 06 октября 2011

Недавно мы решили, что нам было бы полезно, если бы идентификаторы наших сущностей в хранилище данных были слишком большими. Основная причина в том, что мы используем эти идентификаторы в URL-адресах, которые мы хотели бы сохранить краткими и короткими.

В настоящее время, например, идентификаторы наших организаций растут следующим образом:

id=2
id=2003
id=2004
id=2027
id=2028
id=5002
id=5204
id=6001
id=7534
id=8001
id=10192
id=11306
id=14306
id=16330
id=18306
id=20321
id=41312
id=79306
id=113308
id=113311
etc.

Как видите, иногда увеличение исчисляется десятками тысяч.

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

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

UPDATE:

Как и предполагалось @ Amber , мы могли бы закодировать цифры в base62, чтобы сделать их короче (максимум 11 цифр для 64-разрядных беззнаковых int с).

Хотя этот подход не так уж и плох, у него есть несколько недостатков. Во-первых, я не уверен, насколько хорош UX. Во-вторых, некоторые цифры будут конфликтовать с другими строками, которые мы в настоящее время используем в URL.

Как пример:

/books/(\d+)(/book-name)?
/books/selection

Книга с идентификатором 26086738530 будет иметь URL-адреса '/ books / selection / book-name' и '/ books / selection', конфликтующие с другой нашей страницей.

1 Ответ

1 голос
/ 06 октября 2011

Боюсь, в хранилище данных нет механизма, который позволял бы вам управлять автоматическим созданием идентификатора.

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

Как и в случае с base62, вы можете маршрутизировать идентификаторы base62 через другой URL.

...