MongoDB. Часть 2.
Apr 14, 2015 04:05 · 613 words · 3 minutes read
Теперь, когда мы знаем, какую роль играют индексы, что такое масштабирование и репликация, давайте охарактеризуем MongoDB более подробно. Об особенностях “монги” рассказывает техлид проекта НГС.Авто - Даниил Кузнецов (в Авто, как не сложно догадаться, используется MongoDB).
MongoDB - это одна из самых распространенных полноценных баз данных. Она успешно работает с различными сайтами и веб приложениями. Обучиться использованию этой базы данных довольно просто, так как на просторах интернета вы легко найдете большое количество информации.
Основные особенности MongoDB.
Документная модель данных. Документ - это набор полей, состоящий из имен и значений. Значение может быть представлено простым типом, например: строка, число, дата. Но может быть также и массивом и даже другим документом. С помощью таких конструкций можно представлять достаточно сложные структуры данных. Документно-ориентированная модель позволяет естественно представить данные в аггрегированной форме, то есть работать с объектом, как с единым целым. В MongoDB документы группируются в коллекции - контейнеры, не налагающие на данные какую-либо схему. Теоретически у каждого входящего в коллекцию документа может быть своя структура, но на практике документы в одной коллекции похожи друг на друга.
Индексы. В MongoDB индексы реализованы в виде B-деревьев. Такие индексы, применяемые по умолчанию в большинстве реляционных БД, оптимизированы для выполнения самых разнообразных запросов, в том числе сканирования диапазона и запросов с сортировкой результатов. MongoDB позволяет создать до 64 индексов над одной коллекцией. Поддерживаются все вариации индексов: по возрастанию, по убыванию, уникальные, с составным ключом и геопространственные.
Репликация. В MongoDB репликация БД обеспечивается с помощью топологии реплик. Набор реплик распределяется между несколькими серверами для обеспечения избыточности и отработки отказа - автоматического перехода на другой ресурс в случае отказа сервера или сети. Кроме того, репликация применяется для масштабирования операций чтения. Если приложение в основном читает данные из базы, то операции чтения можно распределить по нескольким машинам, входящим в кластер набора реплик.
Быстродействие. В мире баз данных существует обратная зависимость между скоростью записи и долговечностью. Под скоростью записи понимается совокупный объем операций вставки, обновления и удаления, которые база данных способна обработать в единицу времени. Под долговечностью понимается мера уверенности в том, что результат операций записи сохранится. Проблема в том, что скорость записи на жесткий диск на несколько порядков медленнее, чем запись в оперативную память. Некоторые базы данных, например memcached, записывают только в память, что делает их исключительно быстрыми, но не сохраняющими информацию при выключении питания. С другой стороны, лишь немногие базы данных пишут только на диск, поскольку столь низкая производительность неприемлема. В случае MongoDB выбором компромисса управляет пользователь, который задает семантику записи и решает, включать ли запись в журнал. По умолчанию все операции записи следуют семантике «выстрелил и забыл», то есть информация посылается через ТСР-сокет, а ответ от БД не требуется. Если пользователь хочет получать подтверждение, то может выполнить операцию записи в специальном безопасном режиме, поддерживаемом всеми драйверами. Тогда клиент будет ждать от сервера подтверждения, что сведения об операции записи получены без ошибок.
Масштабирование. Простейший способ масштабирования большинства баз данных - модернизация оборудования. Если приложение работает на одном узле, то обычно можно увеличить пропускную способность дисковой подсистемы, добавить память или установить дополнительные процессоры и тем самым расшить узкие места. Методика наращивания оборудования в одном узле называется вертикальным масштабированием. Этот способ прост, надежен и рентабелен, но только до определенного момента. Если используется физическое оборудование, то в конце концов наступает момент, когда затраты на приобретение более мощного сервера запредельно высоки. Тогда имеет смысл задуматься о горизонтальном масштабировании. В этом случае вместо наращивания мощности одного узла база данных распределяется по нескольким серверам. Поскольку в горизонтально масштабируемой системе можно использовать стандартное оборудование, стоимость хранения и обслуживания всего набора данных можно существенно снизить.
Это основные особенности MongoDB. В следующих постах мы более подробно остановимся на некоторых из этих них. А если у вас есть вопросы по этому материалу, то можно смело задавать их в комментариях под постом :)