Зарегистрируйтесь для доступа к 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 байт.


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

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

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

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

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

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

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

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

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

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

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

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»