Уникальный короткий идентификатор для групп сущностей в App Engine - PullRequest
2 голосов
/ 24 июня 2011

Я искал ответы на этот вопрос, но ничего не нашел на деньги.Мне было бы очень интересно услышать мысли людей.Вот так:

В Google AppEngine, скажем, у меня есть несколько объектов User, каждый из которых может иметь несколько объектов Photo.Объекты User должны быть родителями соответствующих им объектов Photo.

Но я также хочу иметь возможность иметь короткие короткие ссылки для каждой фотографии.Я намеревался сгенерировать их с помощью Base64, кодирующего автоматически сгенерированное свойство идентификатора каждой фотографии, но я понимаю, что не могу этого сделать, поскольку идентификаторы, генерируемые AppEngine, не гарантированно являются уникальными для групп объектов (т. Е. Для объектов с разными родителями).Таким образом, фотография, являющаяся дочерним элементом одного пользователя, может иметь тот же идентификатор, что и фотография, являющаяся дочерним элементом другого пользователя.

Это оставляет меня в рассоле.Я могу либо:

  1. Попытаться придумать свой собственный генератор уникальных идентификаторов и использовать этот

  2. Потерять иерархию parent-> child, чтобы идентификаторыбудет уникальным (совсем не заинтересованным в этом)

  3. В качестве ответа на этот вопрос предлагается некий сверхумный вариант

Яочень надеюсь на вариант 3.

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

Заранее спасибо.

Редактировать

Сразу после публикации у меня возникла идея включить в приложение мини-службу сокращения URL-адресов.Мне просто нужна модель без родителя и единственного свойства «Ключ», которое будет указывать на фотографию, на которую я хочу сослаться.Затем я могу Base64 кодировать Id этой сущности, и все готово.Что ты думаешь?

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

Почему бы просто не кодировать идентификатор родительского пользователя вместе с идентификатором соответствующей фотографии? Вы можете закодировать его как два целых числа - /123/2 или в любом другом формате, который вы пожелаете, например, base64, как вы предлагаете. Если вы позволяете пользователям выбирать какое-то уникальное имя и использовать его в качестве имени ключа для объекта пользователя, это также более полезно с точки зрения пользовательского интерфейса, поскольку оно дает вам URL-адреса, такие как /photos/nick/123

0 голосов
/ 25 июня 2011

Если вам сойдет с рук идея № 2 - все готово. как тогда вы получили свой ключ - и «служба сокращения URL» представляет собой один сервлет из 3-4 строк, и все готово.

Но!

Я должен заплатить цену - никаких транзакций за вас.

Как AppEngine поддерживает транзакции только внутри группы сущностей. это фактически возрождает вашу более позднюю идею «службы сокращения URL», основанную на другой модели с ключом ...

Суть в том, что вы не сможете управлять ею в той же транзакции, в которой вы управляете своими "фотографиями пользователя", поэтому вы можете получить неправильные URL-адреса.

Если вам нужна транзакция - создайте URL из родительских ключей. если нет - используйте прямой уникальный ключ без родительской-> дочерней иерархии.

...