Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Модуль 1. Урок 4. MongoDB для сокращателя ссылок. Java для веб-сервисов

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Блок кода static{...}, обязательно выполняющийся, в момент подгрузки класса в ОЗУ:

private static final MongoCollection<Document>  LINKS_COLLECTION;
static {
    final MongoClient mongo = new MongoClient("localhost", 27017);
    final MongoDatabase db = mongo.getDatabase("hexlet");
    LINKS_COLLECTION = db.getCollection("links");
}

static{...} позволяет достать нужную коллекцию из БД и сохранить на нее ссылку в ранее объявленную LINKS_COLLECTION. По завершению своей работы, блок кода в static{...}, будет удален из поля видимости класса и не будет занимать место. Опять же - это все происходит в момент подгрузки класса в оперативную память.

Индексация в MongoDb

Индексы позволяют упорядочить данные по определенному полю, что впоследствии ускорит поиск. Например, если мы в своем приложении или задаче, как правило, выполняем поиск по полю shortUrl, то мы можем индексировать коллекцию по этому полю командой:

> db.links.createIndex({"shortUrl" : 1})

Таким образом с помощью метода createIndex устанавливается индекс по полю shortUrl. MongoDB позволяет установить до 64 индексов на одну коллекцию. Для того чтобы поле shortUrl было уникальным, достаточно добавить флаг unique. Вот так:

> db.links.createIndex({"shortUrl" : 1}, {"unique" : true})

В тоже время тут есть свои тонкости. Так, представим, что поле shortUrl в нашем документе пустое (не определено)... В этом случае для добавляемого документа автоматически создается ключ shortUrl со значением null. Поэтому при добавлении второго документа, в котором не определен ключ shortUrl, будет выброшено исключение, так как ключ shortUrl со значением null уже присутствует в коллекции.

Естественно можно задать уникальный индекс для обоих полей:

> db.links.createIndex({"shortUrl" : 1, "longUrl" : 1}, {"unique" : true})

Однако в этом случае все добавляемые документы должны иметь уникальные значения для обоих полей. Кроме того, тут есть свои ограничения. Например, значение поля, по которому идет индексация, не должно быть больше 1024 байт.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»