Короткие и уникальные ключи в 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.