Mongodb - уникальные идентификаторы с count()
Я создаю сайт с реферальными ссылками на продукты и работаю с mongodb. Все мы знаем, что длинное поле _id выглядит ужасно в URL- адресах, например, http://website.com/p/532600d9a715ea980a00002b/u/532af835a715eae43f00002c.
Я прочитал здесь несколько постов, некоторое время гуглил и удивлялся, почему люди не генерируют этот простой уникальный идентификатор:
- Подсчитать текущие документы в коллекции
- добавить 1 к числу
- добавьте поле к документу с именем например "уникальный"
Таким образом, каждый документ имеет уникальный номер, начиная с 1, и URL-адреса будут выглядеть следующим образом: http://website.com/p/1/u/2.
Я не буду удалять любой документ.
Где проблема с этим решением?
1 ответ
Разумный вариант этого подхода, когда вы увеличиваете счетчик и присваиваете это число, является частью официальной документации.
Проблема с вашим подходом состоит в том, что подсчет является относительно дорогой операцией. Более того, это даже не безопасно при столкновении, потому что два потока могут считать одновременно и получить одно и то же число, поэтому вторая вставка не удастся.
Вообще говоря, последовательности создают узкое место, потому что вам нужна единая точка координации. Для системы с интенсивной записью число операций удваивается (дополнительная $inc
за каждую вставку). Что еще хуже, последовательности пропускают много информации извне (то есть количество записей в базе данных).
Если вы пользуетесь интернет-магазином, блогом и т. Д., Вы, вероятно, хотите, чтобы ваши URL-адреса были более красивыми, описательными и оптимизированными для SEO. /products/displays/27-inch/iiyama-2734FW
,
Если вы создаете веб-приложение, где URL-адреса не видны поисковым системам, я считаю, что ни /users/433
ни /users/532af835a715eae43f00002c
будет причиной для вашего клиента, чтобы выбрать или не выбирать ваше приложение. Может быть, мудрый клиент будет, но тогда они отклонят первый вариант...