Почему MongoDB не использует тот же тип идентификаторов, что и другие СУБД?

#mongodb #mongodb-query

#mongodb #mongodb-запрос

Вопрос:

Прежде чем изучать MongoDB, у меня есть некоторый опыт работы с MySQL, PostgreSQL. На самом деле, когда я использовал их, я создал много таблиц и использовал id в качестве первичного ключа. Структура идентификатора понравилась AUTO_INCREMENT INTEGER , и это было намного проще при наличии некоторых запросов. Но MongoDB использует для этого какую-то большую случайную строку. В чем причина этого? Это какая-то проблема безопасности или что-то еще?

Комментарии:

1. Просто подумайте об идентификаторах в целом и о том, насколько они должны быть уникальными. И GUID (то, что вы назвали большой случайной строкой ) обеспечивает эту уникальность. Реляционные базы данных также поддерживают это.

2. На самом деле, я не знаю этой информации. Спасибо, сэр.

Ответ №1:

MongoDB спроектирован как распределенная и масштабируемая система с высокой степенью масштабируемости.

При использовании последовательного целого числа в качестве идентификатора документа идентификатор должен быть сгенерирован базой данных. Это вызывает три проблемы:

  1. База данных должна иметь центральную службу, которая генерирует идентификаторы (чтобы использовать каждый идентификатор только один раз). В MongoDB вы можете настроить сегментированный кластер; сегменты независимы, и нет ни одного узла, который отвечал бы за все данные.
  2. Поскольку все операции должны выполняться с помощью этой службы генерации идентификаторов, это становится узким местом масштабируемости.
  3. Вы должны извлечь идентификатор из базы данных, чтобы получить полный документ.

Вместо этого MongoDB поощряет генерацию идентификаторов, выполняемых клиентами (драйверами или приложениями). Драйверы генерируют идентификаторы, которые, скорее всего, будут глобально уникальными, без необходимости координировать их с другими экземплярами приложений или любыми узлами сервера. Это означает:

  • Генерация идентификаторов распараллеливается и не должна выполняться каким-либо отдельным узлом, процессом или службой.
  • Генерация идентификатора не создает конфликта в базе данных.
  • Клиент может сгенерировать полный документ, и ему не нужно получать его часть обратно из базы данных.