Короткие и уникальные ключи в CouchDB

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

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

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

1 ответ

Решение

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

{ _id : short_url , url : long_url }

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

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

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

Другие вопросы по тегам