Блок кода 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 байт.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты