mongodb для чего подходит

Hadoop или MongoDB: что использовать для Big Data?

mongodb для чего подходит

Ни одно обсуждение Big Data не будет полным без упоминания Hadoop и MongoDB: двух наиболее популярных инструментов, доступных сегодня. Из-за обилия информации по ним, в том числе об их преимуществах и недостатках, не всегда легко сделать правильный выбор. Каждый из них силен в своей области, но что подойдет вам и вашей организации? Эта статья поможет сделать правильный выбор.

Что такое Hadoop

Hadoop — это набор программ с открытым исходным кодом, предназначенный для обработки Big Data. В его состав входят несколько компонент, каждый из которых выполняет определенную задачу, связанную с аналитикой Big Data.

В состав Hadoop входят:

Distributed File-System

Это один из двух наиболее важных компонентов Hadoop. Distributed File-System (DFS, распределенная файловая система) важна, потому что:

Позволяет легко хранить и обмениваться данными, а также получать к ним доступ через обширную сеть связанных серверов.

Это позволяет работать с данными так, как будто вы работаете с локальным хранилищем.

В отличие от других вариантов хранилищ, таких как расшаренные сетевые папки, у вас остается доступ к данным даже в офлайне.

Hadoop DFS не ограничивается ОС хоста. Вы можете получить к ней доступ с любого компьютера или поддерживаемой ОС.

MapReduce

MapReduce — второй из двух наиболее важных компонентов, позволяющий работать с данными. Он выполняет две задачи:

Map (отображение) — преобразование данных в формат, который можно легко анализировать. Это достигается путем фильтрации и сортировки.

Reduce (свертка) — следует за map. При reduce выполняются математические операции (например, подсчет количества клиентов старше 21 года) на данных map.

Hadoop Common

Hadoop Common — это набор инструментов (библиотек и утилит), которые используются тремя другими модулями Hadoop. Здесь содержатся скрипты и модули, необходимые для запуска Hadoop, а также исходный код, документация и раздел, посвященный участию в сообществе Hadoop.

Hadoop YARN

Это архитектурный фреймворк для управления ресурсами и планирования заданий. YARN предоставляет разработчикам эффективный способ разработки приложений и управления большими наборами данных. С помощью Hadoop YARN можно реализовать интерактивную, потоковую и пакетную обработку.

Почему стоит использовать Hadoop?

Теперь, когда мы знаем, что такое Hadoop, следующий вопрос, на который стоит ответить — ПОЧЕМУ Hadoop. Мы выделили шесть преимуществ Hadoop.

Можно быстро сохранять и обрабатывать большие объемы разнообразных данных. Объемы данных, генерируемые Интернетом вещей и социальными сетями, постоянно растут. Это делает Hadoop ключевым инструментом для работы с подобными источниками данных большого объема.

Distributed File-System обеспечивает Hadoop высокой вычислительной мощностью, необходимой для быстрых вычислений.

Hadoop обрабатывает сбои оборудования, перенаправляя задания на другие узлы и автоматически поддерживая несколько копий данных.

Можно хранить разнообразные структурированные или неструктурированные данные без предварительной обработки (включая изображения и видео).

Фреймворк работает на обычных серверах, которые более эффективны с точки зрения затрат, чем специальные выделенные хранилища.

При увеличении объема обрабатываемых данных можно добавлять узлы, что позволяет системе масштабироваться. С точки зрения администрирования это делается очень просто.

Ограничения Hadoop

Каким бы хорошим ни был Hadoop, у него есть ряд ограничений. Среди них:

MapReduce хорошо подходит для обработки простых запросов. Интерактивные и итеративные задачи решаются не так эффективно, как независимые, требующие простой сортировки (sort) и тасовки (shuffle). Итеративные задачи решаются в несколько отображений (map) и сверток (reduce). В результате между этапами Map и Reduce создается множество файлов, что делает его неэффективным при сложной аналитике.

Не так уж и много Java-программистов, обладающих необходимыми знаниями MapReduce. Это привело к созданию SQL-решений поверх Hadoop, так как программистов, владеющих SQL, найти проще.

Hadoop — сложное приложение, требующее знаний по настройке его безопасности. Также в Hadoop отсутствует шифрование хранилищ и каналов связи.

В Hadoop нет полного набора инструментов, необходимых для обработки метаданных, управления, очистки и обеспечения качества данных.

Сложная архитектура делает Hadoop непригодным для обработки небольших объемов данных, поскольку он не может эффективно работать с произвольным чтением небольших файлов.

Hadoop почти полностью написан на Java — платформе которая часто подвергается атакам со стороны киберпреступников. Поэтому есть значительные риски безопасности.

Что такое MongoDB

MongoDB — это гибкая и масштабируемая документноориентированная NoSQL СУБД, которая поддерживает различные модели данных и хранит данные в наборах ключ-значение. Она была разработана как решение для работы с большими объемами распределенных данных, которые не могут эффективно обрабатываться в реляционных моделях, содержащих строки и таблицы. Как и Hadoop, MongoDB бесплатная и с открытым исходным кодом.

Ключевые особенности MongoDB:

Богатый язык запросов, поддерживающий текстовый поиск, агрегирование и CRUD-операции.

По сравнению с реляционными базами данных требует меньше операций ввода/вывода из-за встраиваемых моделей данных (embedded data model). Для ускорения выполнения запросов есть поддержка индексов.

Отказоустойчивость обеспечивается через репликацию наборов данных. Репликация обеспечивает хранение данных на нескольких серверах, что создает избыточность и высокую доступность.

Поддержка механизма шардинга для горизонтального масштабирования. Позволяет с меньшими затратами обрабатывать увеличивающийся объем данных (по сравнению с вертикальными способами масштабирования).

Поддержка нескольких движков хранения, что позволяет выбирать оптимальный в зависимости от типа рабочей нагрузки.

Виды движков хранения:

WiredTiger

Используется по умолчанию для версий 3.2 и выше. Справляется с большинством типов рабочих нагрузок и включает в себя возможности создания контрольных точек, сжатия и конкурентные операции при записи на уровне документа. Последнее позволяет редактировать документы одновременно нескольким пользователям.

In-Memory Storage Engine

Этот движок хранит документы в оперативной памяти, а не на диске, что повышает предсказуемость задержек при обработке данных.

MMAPv1 Storage Engine

Это самый старый движок и работает только в версии 3.0 и более ранних. Он хорошо справляется с рабочими нагрузками, включающих массовые обновления, чтения и вставки.

Почему стоит использовать MongoDB?

Сегодня бизнесу требуется быстрый и гибкий доступ к данным, чтобы понимать текущую ситуацию и принимать наиболее эффективные решения. MongoDB лучше подходит для решения этих новых задач, связанных с данными. Аргументы в пользу использования MongoDB сводятся следующим:

При использовании реляционных баз данных вам потребуется использовать несколько таблиц. Mongo позволяет представить данные в виде одного объекта, что особенно удобно для неизменяемых данных.

Язык запросов, используемый MongoDB, поддерживает динамические запросы.

Схема в MongoDB неявная, т.е. вам не нужно заранее ее проектировать. Это упрощает представление наследования и полиморфизма в базе данных.

Легко реализовать горизонтальное масштабирование.

Ограничения MongoDB

Хотя MongoDB предоставляет отличные возможности для решения многих проблем, связанных с Big Data, она также имеет ряд ограничений, таких как:

Необходимо вручную обрабатывать соединения (JOIN), что может привести к снижению производительности.

Следствием отсутствия JOIN является также то, что MongoDB потребляет много памяти, поскольку все файлы должны быть считаны с диска в память.

Размер документа не может быть больше 16 МБ.

Вложенность ограничена и не может превышать 100 уровней.

Что использовать для Big Data: MongoDB или Hadoop?

Можно посмотреть, что используют крупные компании, и попробовать последовать их примеру. Например, eBay, SAP, Adobe, LinkedIn, McAfee, MetLife и Foursquare используют MongoDB. С другой стороны, Microsoft, Cloudera, IBM, Intel, Teradata, Amazon, Map R Technologies — известные пользователи Hadoop.

В конечном счете и Hadoop и MongoDB являются популярными решениями для обработки Big Data. Хотя у них много общего (например, открытый исходный код, NoSQL, отсутствие схемы и Map-Reduce), их подход к обработке и хранению данных отличается. Именно эти различия помогут нам сделать выбор между Hadoop и MongoDB.

Ни один, ни другой вариант не решит все ваши проблемы. Теорема CAP помогает выявить узкие места в приложениях, указывая на то, что распределенные системы могут оптимально работать только на двух из трех фронтов: согласованность (consistency), доступность (availability) и устойчивость к разделению (partition tolerance). При выборе инструмента для работы с Big Data стоит выбирать систему с двумя наиболее важными для вас свойствами.

Что насчет реляционных СУБД?

И у Hadoop и у MongoDB есть преимущества по сравнению с традиционными реляционными системами управления базами данных (РСУБД), которые включают в себя параллельную обработку, масштабируемость, обработку больших объемов агрегированных данных, архитектуру MapReduce и экономичность (благодаря открытому исходному коду). Кроме того, обработка данных осуществляется на множестве узлов, кластерах, что позволяет экономить на стоимости оборудования.

Однако в контексте сравнения их с РСУБД, у каждой из платформ есть некоторые преимущества перед другой. Обсудим их подробнее.

Замена РСУБД

MongoDB — это гибкая платформа, которая может стать подходящей заменой РСУБД. Hadoop не заменяет РСУБД, а скорее дополняет ее, помогая архивировать данные.

Работа с памятью

MongoDB написана на C++, что позволяет ей эффективно работать с памятью. Hadoop — это набор программного обеспечения на основе Java, который предоставляет платформу для хранения, извлечения и обработки данных.

Импорт и хранение данных

Данные в MongoDB хранятся в JSON, BSON или в двоичном виде, и все поля могут быть запрошены, проиндексированы, агрегированы или реплицированы за раз. Кроме того можно импортировать данные в форматах JSON или CSV. Hadoop поддерживает различные форматы данных, что устраняет необходимость преобразования данных при их обработке.

Big Data

MongoDB не проектировалась для работы с Big Data. Hadoop, с другой стороны, был создан исключительно для этой цели. Таким образом, последний отлично подходит для пакетной обработки и выполнения длительных ETL-заданий. Также с помощью Hadoop удобно обрабатывать логи из-за их большого размера и постоянного увеличения. Реализация MapReduce в Hadoop более эффективна, чем в MongoDB, что снова делает его более эффективным решением для анализа больших наборов данных.

Обработка данных в реальном времени

MongoDB лучше справляется с анализом данных в реальном времени, а также из-за своего формата хранения, более удобна при работе с данными на фронтенде. Кроме того, геопространственные индексы делают MongoDB идеальным решением для сбора и анализа GPS и географических данных в реальном времени. С другой стороны, Hadoop не очень хорош в обработке данных в реальном времени. Но если вы используете Hadoop SQL-подобные запросы в Hive, вы можете делать запросы намного быстрее и эффективнее, чем JSON.

Резюме

У каждой компании свои уникальные потребности и проблемы, поэтому универсального решения не существует. Выбирать Hadoop или MongoDB вы должны исходя из ваших требований. Но как только вы сделаете этот выбор, убедитесь, что вы и ваши коллеги хорошо разбираетесь в этих технологиях.

Всех желающих приглашаем на открытый урок «Работа с геоданными в MongoDB используя Python». На уроке нам предстоит разобрать, как загрузить Geo-обьекты в MongoDB и получать их, а также отобразить их в браузере, используя Python. Также рассмотрим особенности работы Geo-индексов и соответствующие возможности MongoDB. РЕГИСТРАЦИЯ

Источник

Русские Блоги

Преимущества и недостатки Mongodb и сфера использования

Сравнение mongodb, memcache и redis

Redis и memcahce похожи, но они полностью отличаются от mongodb, и сравнимости почти нет.

В общем случае redis / memcache основывается на памяти и фокусируется на производительности, в основном он используется в качестве слоя кэша, например, для хранения сеансов. Mongodb ориентирован на документы и хранит неструктурированные данные, аналогичные JSON. Он очень удобен для запросов и обладает высокой эффективностью разработки. Он похож на традиционную реляционную базу данных SQL.

Сравните Redis, Memcache и MongoDB из следующих измерений:

1. Объем

Установочный пакет Mongodb намного больше, похожий на mySQL, всего в сотни мегабайт.

2. Производительность

Относительно высоки, производительность не должна быть узким местом для нас

Вообще говоря, TPS похож на redis и memcache, но больше, чем mongodb

3. Удобство эксплуатации

Структура данных Memcache является единой

Redis более распространен, с точки зрения работы с данными, Redis лучше и меньше времени ввода-вывода

mongodb поддерживает расширенные выражения данных, индексы и большинство похожих реляционных баз данных и поддерживает очень богатый язык запросов

4. Размер пространства памяти и объем данных

Redis добавил свою собственную функцию VM после версии 2.0, преодолев ограничение физической памяти, вы можете установить время истечения для значения ключа (аналогично memcache)

memcache может изменять максимально доступную память, используя алгоритм LRU

mongoDB подходит для хранения больших объемов данных, полагается на виртуальную машину операционной системы для управления памятью, а также более эффективен в потреблении памяти. Не обслуживает другие службы.

5. Удобство использования (проблема с одной точкой)

Для одиночных задач,

Redis полагается на клиента для достижения распределенного чтения и записи: при репликации «главный-подчиненный» каждый подчиненный узел использует весь моментальный снимок каждый раз, когда он повторно подключается к главному узлу, без дополнительной репликации из-за проблем с производительностью и эффективностью,

Следовательно, проблема, связанная с одной точкой, является более сложной: автоматическое разбиение не поддерживается, и для установки согласованного механизма хеширования необходимо полагаться на программу.

Сам Memcache не имеет механизма избыточности данных и не является необходимым: для предотвращения сбоев используется зрелый алгоритм хеширования или кольцевой алгоритм для решения проблемы дрожания, вызванной одной точкой сбоя.

mongoDB поддерживает ведущий-ведомый, реплицирующий регистр (внутренний алгоритм выбора paxos, автоматическое восстановление после сбоев), механизм автоматического разделения, защита клиента от отказов и механизмы сегментации.

6. Надежность (постоянная)

Для сохранения данных и восстановления данных,

Поддержка Redis (снимок, AOF): постоянство зависит от снимков, а AOF повышает надежность и влияет на производительность.

Memcache не поддерживается и обычно используется в качестве кэша для повышения производительности;

MongoDB использует binlog для поддержки надежности постоянства начиная с версии 1.8

7. Согласованность данных (поддержка транзакций)

Memcache использует cas для обеспечения согласованности в параллельных сценариях

Поддержка транзакций Redis относительно слабая и может гарантировать только непрерывное выполнение каждой операции в транзакции.

mongoDB не поддерживает транзакции

8. Анализ данных

mongoDB имеет встроенную функцию анализа данных (mapreduce), другие не поддерживают

9. Сценарии применения

redis: меньшие данные для большей производительности операций и операций

memcache: используется для уменьшения нагрузки на базу данных и повышения производительности в динамических системах; для повышения производительности используется кэш-память (подходит для чтения больше и записи меньше, для большого объема данных можно использовать сегментирование)

MongoDB: в основном решает проблему эффективности доступа к массивным данным

Сравнение MongoDB и MySQL

Термины и понятия

Многие концепции MongoDB похожи на MySQL

Сравнение функций

Как и MySQL, MongoDB также предоставляет богатые функции, имеет собственный язык запросов, высокодоступные вторичные индексы (включая текстовый поиск и географическое местоположение), мощную, высокоагрегированную среду анализа данных и более богатый тип данных, чем реляционные базы данных. И масштабируемость

Язык запросов

Зачем использовать MongoDB вместо MySQL?

Предприятия всех размеров внедряют MongoDB, поскольку она позволяет им создавать приложения и быстрее обрабатывать различные типы данных и более эффективно управлять большими приложениями.
Объектно-ориентированное программирование MongoDB упрощает разработку и приближается к современным языкам высокого уровня. Используя MongoDB, вы можете управлять таблицей ассоциации, не используя слой ORM в коде.
MongoDB имеет гибкую модель данных, что означает, что она может реагировать на развитие потребностей бизнеса.
MongoDB также можно распространить на центры обработки данных. По сравнению с реляционной базой данных MongoDB она обеспечивает более высокую доступность и лучшую масштабируемость. По мере роста данных MongoDB можно использовать без простоев и без модификации приложений. Программа расширяется, обычно MySQL, что требует от инженеров дополнительной работы.

Когда лучше использовать MySQL?

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

MongoDB используется с MySQL?

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

Сценарии использования MongoDB

Эти данные имеют самоописание и представляют собой иерархическую древовидную структуру данных. Redis может использовать хэш для хранения простых реляционных данных.

MongoDB хранит данные в формате JSON.

Подходит для сценариев: записи событий, управления контентом или блоговых платформ, таких как системы комментариев.

1. Принцип постоянства mongodb

3. Какая основная разница между MySQL и MongoDB?
Разница между реляционной базой данных и нереляционной базой данных, то есть разница в структуре хранения данных.

4. Каковы характеристики MongoDB?
(1) Ориентированный на документы (2) Высокая производительность (3) Высокая доступность (4) Простота расширения (5) Богатый язык запросов

5. Поддерживает ли MongoDB хранимые процедуры? Если да, то как его использовать?
MongoDB поддерживает хранимые процедуры, которые написаны на javascript и хранятся в таблице db.system.js.

7. Почему файл данных MongoDB большой?
MongoDB использует предварительно выделенное пространство для предотвращения фрагментации файла.

8. Что происходит, когда я обновляю документ в переносимом чанке?
Операция обновления немедленно произойдет на старом чанке (Chunk), а затем изменения будут скопированы в новый осколок перед передачей права собственности.

9. MongoDB строит индекс на A: , будут ли запросы A: и A: использовать индексы?
Нет, только индекс будет использоваться для A: .

10. Что произойдет, если осколок остановится или будет очень медленным?
Если осколок останавливается, запрос выдаст ошибку, если в запросе не установлена ​​опция «Частично». Если осколок реагирует медленно, MongoDB будет ждать его ответа.

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

MongoDB

MongoDB (от humongous) — кроссплатформенная документо-ориентированная система управления базами данных. Классифицированная как база данных NoSQL, MongoDB отходит от традиционных основ реляционной структуры базы данных в пользу JSON-подобных документов с динамическими схемами (MongoDB называет этот формат BSON), что делает интеграцию данных в определенных видах приложений проще и быстрее. Выпущено под комбинацией GNU Affero General Public License и лицензией Apache, MongoDB является бесплатным программным обеспечением с открытым исходным кодом.

Содержание

Основные особенности

Документо-ориентированность
Вместо того, чтобы брать бизнес-объект и разбить его на несколько реляционных структур, MongoDB может хранить бизнес объект в минимальном количестве документов. Например, вместо того, чтобы хранить название и сведения об авторе в двух различных реляционных структур, название, автор, и другой информации в заголовке, связанных могут быть сохранены в одном документе под названием Книга.

Специальные запросы
MongoDB поддерживает поиск по области, запросов по диапазону, поиск регулярного выражения. Запросы могут возвращать определенные поля документов, а также включают в себя пользовательские функции JavaScript.

Индексация
Любое поле в документе MongoDB могут быть проиндексированы (индексы в MongoDB концептуально схожи с RDBMSes). Вторичные индексы также доступны.

mongodb для чего подходит

Репликации
MongoDB обеспечивает высокую доступность с наборов реплик. Реплика набор состоит из двух или более копий данных. Каждый набор реплик член может выступить в роли первичного или вторичного реплики в любое время. Основная реплика выполняет все пишет и читает по умолчанию. Вторичные реплики поддерживать копию данных первичного помощью встроенного в репликации. Когда первичная реплика не удается, реплика устанавливается автоматически проводит избирательный процесс, чтобы определить, какие дополнительные должна стать основным (рисунок 1). Вторичные также может выполнять операции чтения, но данные в конечном счете соответствует по умолчанию.

Балансировка нагрузки
MongoDB для балансировки нагрузки использует приём шардинга. Пользователь выбирает ключ осколка, который определяет, как данные в коллекции будет распространяться. Данные разделены на диапазоны (на основе ключа шарда) и распределены по нескольким осколков. (Осколок мастер с одним или несколькими рабами.) MongoDB может работать на нескольких серверах, балансировка нагрузки и/или дублирования данных, чтобы сохранить систему и работает в случае выхода из строя оборудования. Автоматическая конфигурация легко развернуть и новые машины могут быть добавлены к работающей базе данных.

Файл хранения
MongoDB может быть использован в качестве файловой системы, пользуясь балансировки нагрузки и репликации данных содержит более нескольких машин для хранения файлов.

Эта функция, называемая сетевая файловая система, входит с драйверами MongoDB и доступна для языков программирования (см «Языковая поддержка» для списка поддерживаемых языков). MongoDB предоставляет функции для работы с файлами и содержания для разработчиков. GridFS используется, например, в плагинах для NGINX и Lighttpd. Вместо того чтобы хранить файл в одном документе, GridFS делит файл на части, или куски, и в магазинах каждый из этих кусков в качестве отдельного документа.

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

Агрегирование
MapReduce может быть использован для пакетной обработки данных и операциями агрегирования. Рамки агрегации позволяет пользователям получить вид результатов, для которых SQL GROUP BY статьи используется.

Серверный выполнение JavaScript
JavaScript может быть использован в запросах, агрегация функции (такие как MapReduce), и направлено напрямую в базу данных, которая будет выполнена.

Блокирование коллекций
MongoDB поддерживает коллекции фиксированного размера называется блокированы коллекции. Этот тип сбора поддерживает порядок ввода и, по истечении заданного размера была достигнута, ведет себя как круговой очереди.

Архитектура

Модель данных

Данных в качестве документов
MongoDB хранит данные как документы в двоичном представлении под названием BSON (Binary JSON). Кодирование BSON расширяет популярным JSON (JavaScript Object Notation) представление, чтобы включить дополнительные типы, такие как Int, длинные, и с плавающей точкой. BSON документы содержат одно или несколько полей, а каждое поле содержит значение определенного типа данных, в том числе массивов, бинарных данных и судокументов.

Документы, которые стремятся поделиться аналогичную структуру организованы коллекций. Это может быть полезно думать о коллекциях как аналог таблицы в реляционной базе данных: документы схожи с рядами, и поля похожи на колонках.

Рассмотрим, например, модель данных для приложения блогов (рисунок 2). В реляционной базе данных данные модели будет включать несколько таблиц. Для упрощения примера предположим, есть столы для категории, теги, пользователей, Комментарии и статьи.

В MongoDB данные могут быть смоделированы в виде двух сборников, один для пользователей, а другой для статей. В каждом документе блоге там может быть несколько комментариев, несколько тегов, и несколько категорий, каждая выражается в виде встроенного массива.

mongodb для чего подходит

Как показывает этот пример, документы MongoDB, как правило, есть все данные для данной записи в единый документ, в то время как в реляционной базе данных информации для данной записи, как правило, распространяется во многих таблицах. С модели документа MongoDB, данные более локализованы, что значительно снижает необходимость объединения отдельных таблиц. В результате резко возрастает производительность и масштабируемость через стандартное оборудование в виде одного чтения к базе данных может получить весь документ, содержащий все данные.

Кроме того, документы MongoDB BSON более тесно связаны со структурой объектов в языке программирования. Это делает его проще и быстрее для разработчиков смоделировать, как данные в приложении будут отображаться в данных, хранимых в базе данных.

Схема Дизайна
Хотя MongoDB обеспечивает гибкость схемы, дизайн схемы по-прежнему важно. Разработчики и администраторы баз данных должны рассмотреть ряд вопросов, включая типы запросов, приложение необходимо будет выполнить, как объекты управляются в коде приложения, и как документы будут меняться с течением времени. Проектирование схемы обширная тема, которая выходит за рамки данного документа. Для получения более подробной информации, пожалуйста, см моделирования данных соображений.

Модель запросов

Одно из фундаментальных различий по сравнению с реляционных баз данных является то, что модель запроса MongoDB реализован как методов или функций в API конкретного языка программирования, в отличие от совершенно отдельный языке, как SQL. Это, в сочетании с близостью между JSON модели документа MongoDB и структур данных, используемых в объектно-ориентированного программирования, делает интеграцию с приложениями простых. Для получения полного списка драйверов посетите страницу MongoDB Драйверы.

Монго оболочки
Оболочки Монго является богатым, интерактивная оболочка JavaScript, что входит в состав всех дистрибутивов MongoDB. Почти все команды, поддерживаемые MongoDB может быть выдан через оболочку, в том числе административных операций. Оболочка Монго является популярным способом взаимодействовать с MongoDB для специальных операций. Все примеры в Руководстве по MongoDB на основе скорлупы. Для более на корпусе Монго, увидеть соответствующую страницу в руководстве MongoDB.

Типы Запроса
В отличие от баз данных NoSQL, MongoDB не ограничивается простыми операциями ключ-значение. Разработчики могут создавать приложения, используя богатые сложные запросы и вторичные индексы, которые разблокировать значение в структурированных, полу-структурированных и неструктурированных данных.

Ключевым элементом этой гибкости является поддержка MongoDB для многих типов запросов. Запрос может вернуть документ, подмножество конкретных областях в документе или сложных агрегатов против многих документов:

Индексирование
Индексы решающим механизмом для оптимизации производительности и масштабируемости системы, обеспечивая гибкий доступ к данным. Как и большинство систем управления базами данных, в то время как индексы улучшит производительность некоторых операций на несколько порядков, они берут на себя нагрузку, связанные в операциях записи, использование дискового пространства, и потребление памяти. По умолчанию, механизм хранения WiredTiger сжимает индексы в памяти, освобождая больше рабочего набора документов (рисунок 3).

mongodb для чего подходит

MongoDB включает в себя поддержку многих видов вторичных индексов, которые могут быть объявлены на любом поле в документе, в том числе полей в массивы:

Оптимизация запросов
MongoDB автоматически оптимизирует запросы, чтобы сделать оценку как можно более эффективным. Оценка обычно включает в себя выбор данных на основе предикатов и сортировки данных на основе критериев сортировки, предоставляемых. Оптимизатор запросов выбирает лучший показатель для использования, периодически работает альтернативные планы запросов и выбрав индекс с лучшим временем отклика для каждого типа запроса. Результаты этого теста эмпирической хранятся в кэшированной плана запроса и периодически обновляться. Разработчики могут предварительно отзыв и оптимизировать планы, используя мощный объяснить метод и фильтры индекса.

Индекс пересечения обеспечивает дополнительную гибкость, позволяя MongoDB использовать более одного индекса для оптимизации специальную запрос во время выполнения.

Покрытые Запросы
Запросы, которые возвращают результаты, содержащие только индексированные поля называются покрытые запросы. Эти результаты могут быть возвращены, не читая из исходных документов. С соответствующими индексами, нагрузки могут быть оптимизированы для использования преимущественно покрытые запросов.

Управление данными

Авто-шардинг
MongoDB обеспечивает горизонтальное масштабирование аут для баз данных по низкой стоимости, товар аппаратного или облачной инфраструктуры, используя технику под названием Sharding, который является прозрачным для приложений. Шардинг распределяет данные между несколькими физическими разделов, называемых осколками. Шардинг позволяет развертывание MongoDB для решения аппаратных ограничений одном сервере, например, узкие места в ОЗУ или дискового ввода / вывода, без добавления сложности в применении. MongoDB автоматически балансирует данные в sharded кластера, так как данные растет или размер кластера увеличивается или уменьшается.

В отличие от реляционных баз данных, Sharding является автоматическим и встроенным в базу данных. Разработчики не сталкиваются сложность построения логики Sharding в их коде приложения, которые затем должен быть обновлен осколки будут перенесены. Операции команды не нужно развернуть дополнительное программное обеспечение кластеризации для управления процессов и данных распределения.

В отличие от других распределенных баз данных, несколько политик Sharding доступны, которые позволяют разработчикам и администраторам распределять данные в кластере по образцам запросов или местности данных. В результате, MongoDB обеспечивает высокую масштабируемость гораздо через разнообразный набор рабочих нагрузок:

Маршрутизатор запрсов
Маршрутизатор запросов является прозрачным для приложений; есть ли один или сто осколки, код приложения для запроса MongoDB то же самое. Приложения выполнять запросы к маршрутизатору запроса, отправляет запрос в соответствующие осколками.

Для ключ-значение запросов, основанных на ключе шарда, маршрутизатор запрос будет отправлять запрос на осколок, который управляет документ с запрашиваемой ключа. При использовании диапазона на основе шардинга запросы, которые определяют диапазоны по ключу шарда отправляются только черепки, которые содержат документы со значениями в пределах диапазона. Для запросов, которые не используют ключ осколка, маршрутизатор запрос будет транслировать запрос всем осколков и агрегировать и сортировать результаты в подходящее. Несколько маршрутизаторов запросов можно использовать с системой MongoDB, и соответствующее количество определяется на основе требований производительности и доступности приложения.

Базовые операции в MongoDB

Проверка установленной версии MongoDB

Подключиться к базе данных из оболочки

или с использованием команды kill:

Выключить базу данных
Завершить процесс:

, эта команда вызовет резкое падение базы данных, и это может привести к несогласованности и потере данных.

Обращение к списку созданных баз данных

Мы проверили, что мы подключены к базе данных Мы обратились с просьбой, однако, не была создана! MongoDB создает резервную копию базы данных и сбор, когда мы вставки наш первый документ.

Мы уже знаем, что MongoDB не схему, то есть, мы не должны объявить структуру и характеристики наших коллекций перед их использованием. Таким образом, коллекция будет создана, когда мы вставляем первый документ в нем, как мы видели раньше.

MongoDB создает набор файлов в базе данных. Эти файлы хранятся в каталоге мы указали, когда мы начали службу mongod или, по умолчанию, в каталоге /var/lib/mongodb/.

Удалить базу данных

С помощью команды dropDatabase () мы удалим базу данных всю текущую, включая метаданные, а также физические файлы. К «db» объект будет по-прежнему указывает на ту же базу данных.

MongoDB Drupal 8

Для установки использовалась ОС Ubuntu 14.04

MongoDB C# ORM

Создание базы данных.

По умолчанию база данных находится в папке c:/data/db Запустим mongo.exe и создадим новую базу данных:

Особенностью MongoDb является то, что это документо-ориентированная база данных, и не содержит информацию о структуре, так что тут мы закончили. Сразу переходим к описанию моделей данных.

У нас будет одна сущность (коллекция) unicorns.

Далее рассмотрим работу с MongoDB:

Подключение к базе

По умолчанию база занимает порт 27017 на сервере (у нас как обычно localhost). Подключаемся к базе:

Добавление/изменение записи

MongoDb самостоятельно добавляет поле _id — уникальный параметр. Если при выполнении команды Save у объекта будет Id существующий уже в коллекции, то выполнится апдейт этого объекта.

Индексация

Для быстрого поиска мы можем добавить индекс по какому-либо полю. Для индексации используется команда

Это ускорит сортировку по этому полю.

Удаление

Для удаления по id создается запрос (Query). В данном случае это

и выполняется команда:

Вывод записей

Для вывода значений применив фильтр и отсортированных, да еще и с пейджингом используется курсор. Например чтобы выбрать из коллекции неудаленные (IsDeleted = false) отсортированные по дате убывания (AddedDate desc) 10ю страницу (пропускаем 90 элементов и выводим 10 следующих) составляется такой курсор:

Поиск

Для того чтобы найти элемент содержащий заданную подстроку необходимо задать следующий запрос:

Бекап базы

Именно бекап а не репликация. Для того чтобы иметь доступ к файлу базы данных нужно выполнить lock (база продолжит работать, только в этот момент все команды записи будут кешироваться, чтобы потом выполнится). После чего базу данных можно скопировать, заархивировать и выложить на ftp. После этой процедуры базу надо разлочить (Unlock). Команды:

Если что-то пойдет не так, то сервер БД надо будет перезапустить с командой:

Полное видео установки

Установка Mongo DB в Ubuntu Server 16.04

MongoDB доступен из стандартных репозиториев Ubuntu, однако, для установки самых последних версий рекомендуется использовать официальный репозиторий MongoDB. На этом шаге мы добавим этот репозиторий на наш сервер.

Ubuntu проверяет подлинность пакетов путём проверки подписей GPG ключей, поэтому сначала нам необходимо импортировать ключ официального репозитория MongoDB.

После успешного импорта ключа вы увидите следующий вывод:

Далее нам необходимо добавить настройки репозитория в apt, чтобы иметь возможность загрузить MongoDB с помощью apt.

Для этого выполните следующую команду:

После добавления репозитория нам необходимо обновить список пакетов.

Теперь мы можем установить пакеты MongoDB.

Эта команда установит несколько пакетов, содержащих последнюю стабильную версию MongoDB, а также некоторые средства настройки сервера MongoDB.

Для того, чтобы запускать MongoDB в виде сервиса Ubuntu 16.04, нам необходимо создать юнит-файл описывающий этот сервис. Юнит-файлы сообщают systemd, как управлять соответствующими ресурсами. Наиболее часто встречающимся типом юнит-файла является сервис, который указывает, как запускать и останавливать тот или иной сервис. Также этот файл указывает, надо ли запускать соответствующий сервис при старте системы, а также, имеет ли сервис зависимости от другого программного обеспечения.

Мы создадим юнит-файл для управления сервисом MongoDB. Создайте файл конфигурации mongodb.service в директории /etc/systemd/system с помощью nano или любого другого текстового редактора.

Вставьте следующий текст в этот файл, сохраните и закройте его.

Этот файл имеет простую структуру:

Секция Unit описание сервиса MongoDB, а также его зависимостей, которые должны быть удовлетворены до запуска сервиса. В нашем случае MongoDB требует наличия сетевого подключения для запуска, поэтому мы указали директиву network.target.

Секция Service описывает параметры запуска сервиса. Директива User указывает, что сервис будет запущен от имени пользователя mongodb, а директива ExecStart задаёт команду запуска сервера MongoDB.

Последняя секция Install сообщает systemd, когда необходимо автоматически запускать сервис. Параметр multi-user.target задаёт стандартную последовательность запуска, что означает, что сервер будет автоматически запущен в процессе загрузки.

Далее запустим только что созданный нами сервис с помощью systemctl.

Эта команда не выводит ничего в консоль после завершения. Мы можем использовать systemctl для проверки успешного запуска сервиса.

Последнее, что нам осталось сделать, это включить автоматический запуск MongoDB при старте системы.

Репликации MongoDB

Репликация — механизм синхронизации содержимого базы данных с несколькими серверами (репликами). Если один сервер упадет, другой сможет продолжить раздавать и принимать данные (рисунок 4).

mongodb для чего подходит

В MongoDB репликация асинхронная. Это значит, что данные синхронизируются между репликами не в момент непосредственного изменения данных, а через какое-то время. В этом есть плюс: не тратится время на репликацию в момент изменения данных. Минус: в определенные моменты времени данные между репликами могут быть не согласованными. На данный момент MongoDB поддерживает две основные репликации: master-slave и replica sets.

Master-Slave

mongodb для чего подходит

Master-Slave применяется во многих СУБД, его модель изображена на рисунке 5. Есть несколько серверов: один мастер, и два слейва. Удалить и писать в базу можно только в мастер-сервере, а читать как из мастера так и из слейвов. Слейвов может быть несколько. Такая схема полезна, когда у нашей системы много запросов на получение данных. Так как приложение может обращаться к слейвам для чтения, то мы можем равномерно распределить нагрузку между ними.

Реализация master-slave в MongoDB. Допустим у нас три машины: 127.0.0.1 будет мастером, а 127.0.0.2 и 127.0.0.3 соответственно слейвами. Для начала запустим mongod в режиме мастера:

Cлейвы знают, где находится мастер (параметр source ). Если в мастер-сервер кто-то что-то писал или удалял пока осуществлялась настройка слейва, то слейвы автоматически и асинхронно синхронизируются с мастером, и у них будет свежая копия данных.

Когда запускается мастер-сервер, он создает в своей базе коллекцию local.oplog.$main (лог операций). В этой коллекции хранятся все последние операции (изменения данных), которые применялись на мастере. Именно из этой коллекции по слейвам расходятся команды обновления их локальных копий. Размер лога операций ограничен ( можно задать самим). В случае, если лог будет заполнен полностью, более старые операции будут удаляться из него, а новые соответственно добавляться.

Replica Sets

Затем серверы реплик необходимо инициализировать. В это время реплики решат между собой, кто будет выполнять функции мастера.

После запуска серверов и их инициализации можно приступать к изменению данных на мастере и чтению с него. Чтение как и запись возможны только с мастера.

В наборе реплик в случае падения мастера, оставшиеся сервера реплик автоматически решают кто из них станет мастером. Для программы, использующей реплицирование этот процесс прозрачный, так как драйверы MongoDB для всех языков поддерживают указание всех адресов реплик. То есть, программа всегда знает где и сколько реплик и кто из них мастер. Драйверы определяют мастера, и соответственно к нему осуществляют запрос. Это возможно благодаря тому, что каждый реплик-сервер хранит данные и о мастере и о других репликах (для этого существует команда rs.status() ).

Успехи и перспективы развития

В финансовых учреждениях MongoDB заявила, что выиграла контракт с одним из крупнейших банков в Китае на своей новой платформе обработки кредитов, а также с южнокорейской компанией по производству мобильных приложений для управления финансовыми ресурсами Rainist.

В прошлом квартале MongoDB заключил партнерское соглашение с SAP, который интегрирует MongoDB с предложениями облачного программного обеспечения SAP. Это партнерство последовало за аналогичным партнерством с IBM и Accenture в начале этого года. Признание, которое демонстрируют эти крупные фирмы, занимающиеся консалтингом и разработкой программного обеспечения, говорит о том, что MongoDB добилась успеха на корпоративном рынке.

Кроме того, растущий клиент MongoDB поддерживает растущий набор функций, особенно для предложения компании Atlas, которое представляет собой MongoDB как услуга через облако. В самом последнем квартале компания представила Mobile Sync, которая синхронизирует данные на конечном устройстве с данными на внутренней базе данных. MongoDB также анонсировала новые высокопроизводительные кластеры в AWS, которые в основном увеличивают скорость обработки больших наборов данных, хранящихся в Atlas. MongoDB также разработал функцию, которая позволяет Atlas безопасно взаимодействовать с данными в виртуальном частном облаке клиентов через частные сети, что должно расширить MongoDB для клиентов, имеющих как публичные, так и частные облака.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *