вторник, 31 октября 2017 г.

MongoDb NoSql Общие сведения

1. Введение

MongoDb - документоорентированная NoSql база данных, используемая для хранения больших объемов информации, предоставляющая высокую производительность, высокую доступность и автоматическое масштабирование.

2. Что такое MongoDb?

  • MongoDb - документная база данных, каждая база данных содержит коллекции, которые в свою очередь содержат документы. Каждый документа может сосостоять из различного числа полей. Размер и содержимое каждого документа может быть различен и хранится в JSON подобном формате.
  • Строкам (или документам, если называть в стиле MongoDb), не нужно заранее созданной схемы. Вместо этого, поля можно создавать на лету.
  • Модель данных, доступная в MongoDb, позволяет разработчикам легче представлять иерархические отношения, хранить массивы и другие более сложные структуры

3. Что такое NoSql

БД NoSql обозначают не-SQL БД или без реляционный подход к БД.
  • Предоставляет механизм хранения и извлечения данных, отличных от табличной реляционной модели, используемой в реляционныз БД
  • Предоставляет большую гибкость, т.к. все записи не ограничены именами столбцов и типами, определенными во всей таблице.
  • Не использует стандартный язык SQL для запроса данных и не предусматривает строгую схему.
  • С NoSql, ACID ( Атомарность,Консистенция, Изоляция, Долговечность) свойства транзакций БД не гарантируются.
  • Предлагает масштабируемость и высокую производительность для обработки огромных объемов данных.

4. Почему использовать MongoDb

Ниже приведены несколько причин, почему, необходимо начать использовать MongoDb
  • Документо-ориентированность: т.к. MongoDb - NoSql БД, то вместо того, чтобы хранить данные в релационном формате - они хранятся в виде документа. Это делает MongoDb более гибкой.
  • Специальные запросы: MongoDb поддерживает поиск по полю,  диапазону и регулярным выражениям. Так же есть возможность вернуть поле документа.
  • Индексация: Индексы создаются, чтобы увеличить производительность поиска.
  • Автоматическая балансировка нагрузки: MongoDb использует концепцию Шардирования для горизонтального масштабирования , разбивая данные на нескольких экземплярах MongoDb.
  • Репликация: MongoDb может обеспечить высокую доступность набора реплик.

5. Различия с РСУБД

Ниже рассмотрены основные различия между NoSql и РСУБД.

  • В РСУБД используется термин Таблица, в MongoDb - Коллекция.  В РСУБД  таблица состоит из строк и столбцов, которые используются для хранения данныйх, в MongoDb, коллекции состоят документов, которые состоят из полей, которые состоят пары ключ-значение.
  • Строка  в РСУБД, Документ в MongoDb.
  • Столбец в РСУБД, поле в MongoDb.
  • Join в РСУБД, встроенные документы в MongoDb. В РСУБД часто данные хранятся в различных таблицах, чтобы показать полный набор данных - необходимо произвести Join таблиц. В MongoDb данные обычно хранятся в одной коллекции, но разделены встроенными документами, т.о Join, как концепция - отсутствует.
  • В РСУБД - Первичный ключ, в MongoDb - _id, который создается автоматически.

четверг, 26 октября 2017 г.

Java 9: Фабричный метод для создания неизменяемых коллекций

В данной статье рассмотрим новую фичу JDK 9 - создание неизменяемых коллекций. До Java9, если мы хотели получить неизменяемые коллекции - необходимо было вызвать unmodifiableXXX();  методы у java.util.Collections. Например, чтобы создать неизменяемый список, необходимо выполнить:

List<Strong> immutablelist = Collections.unmodifiableList(new ArrayList<String>(){{
            add("Smart");
            add("Techie");
}});

immutablelist.add("Smart_1");
При попытки добавлении новой записи "Smart_1" - получаем ошибку:

java.lang.UnsupportedOperationException thrown:
        at Collections$UnmodifiableCollection.add (Collections.java:1056)

Код выше - слегка многословен, чтобы создать немодифицированный список. Т.к. Java адоптирует функциональный стиль в Java 9 разработаны удобные, более компактные фабричные методы для создания немодифицируемых коллекций, как указано в JEP 269. Рассмотрим как это работает:

//Пустой список
List immutableList = List.of();
// Не пустой список
immutableList = List.of("Smart","Techie");
// Не пустая Map
Map immutableMap = Map.of(1,"Smart",2,"Techie");

 Если вы посмотрите на вышеупомянутый фабричный метод Java 9, код представляет собой простой однострочный набор для создания неизменяемых коллекций

PS это мой перевод данной стать.

среда, 11 октября 2017 г.

Инициализация базы данных в Docker

Если нам необходима готовая база данных при старте посгрешки в докере, это возможно достичь, добавив следующие строки в dockerfile:

ENV INIT_SQL init.sql
ADD init.sql /docker-entrypoint-initdb.d/

Они копируют init.sql в докер контейнер. Выполнение данного скрипта произойдет только один раз, при мервом запуске.