Короткие и уникальные ключи в CouchDB - PullRequest
3 голосов
/ 07 декабря 2010

Я хочу написать сокращение URL в качестве отдельного CouchApp, но мне интересно, возможно ли это. Очевидно, что основным требованием для сокращения URL-адресов является наличие коротких и уникальных ключей.

Я хочу отправить длинный URL-адрес в CouchDB и получить сокращенный URL-адрес. Я думал об использовании обработчика обновлений, но ему пришлось бы запросить БД, чтобы проверить, является ли ключ уникальным, что, по-видимому, невозможно.

Есть ли способ генерировать короткие и уникальные ключи с помощью CouchDB? Или мне нужна тонкая обертка вокруг CouchDB?

1 Ответ

2 голосов
/ 07 декабря 2010

Я бы пошел на тонкую обертку, основываясь на документах со следующей структурой:

{ _id : short_url , url : long_url }

Вставка нового длинного URL-адреса может быть выполнена за один шаг: программа-оболочка сгенерирует новый _id, сделает попытку PUT и повторите попытку с новым _id, пока он не удастся. Это гарантирует, что каждый короткий URL используется только один раз.

Боюсь, что этот подход «создать, попытаться, повторить» - единственная стратегия, которая обеспечивает уникальность, и она не доступна без оболочки.

Если вы хотите, чтобы один и тот же длинный URL повторно использовал тот же короткий URL, вы также можете добавить представление, которое echo(doc.url,null), и получить _id для вашего URL, если он существует. Это означает, что, если несколько клиентов не попытаются добавить один и тот же длинный URL в одно и то же время, для этого длинного URL будет использоваться только один короткий URL.

...