MONGODB¶
Вопросы¶
- Что такое NoSQL?
- Какие есть типы хранилищ данных в NoSQL?
- Что такое MongoDB?
- На каком языке написана MongoDB?
- Какие языки программирования можно использовать с MongoDB?
- Использует ли таблицы для хранения данных, база данных MongoDB?
- Какие преимущества MongoDB?
- Какие недостатки MongoDB?
- Что такое пространство имен в MongoDB?
- Что такое репликация?
- Поддерживает ли MongoDB ограничения внешнего ключа(foreign key)?
- Как мы можем достичь primary key - foreign key отношения в MongoDB?
- Объясните структуру ObjectID в MongoDB.
- Если удалить документ из базыданных, удалится ли он с диска?
- Что такое индексы в MongoDB?
- Сколько индексов создается по умолчанию в MongoDB для новой коллекции?
- Что такое скрытый запрос в MongoDB?
- Поддерживает ли MongoDB поиск текста?
- Какая команда позволяет получить все индексы определенной коллекции?
- Что такое Шардинг в MongoDB?
- По умолчанию, MongoDB пишет и читает данные из primary и secondary наборов реплик. Правда ето или ложь?
- Почему MongoDB не является предпочтительным решением для 32-битных систем?
- Какая команда,позволяет проверить, являетесь ли вы на главном сервере или нет?
- Что такое GridFS?
- Что такое Map/Reduce?
- Каков создать/удалить коллекцию в MongoDB?
- Какова роль профайлера в MongoDB?
- Какая команда позволяет вставить документ?
- Приведите пример использования индекса в MongoDB.
- Какой метод вернёт список всех документов в колекции?
- Что такое селекторы запросов в MongoDB?
- Что вы знаете об обновлении/вставке в MongoDB?
- Что вы знаете об условных оператораторах в MongoDB?
- Как удалить документ в MongoDB?
Ответы¶
Что такое NoSQL?¶
NoSQL (Not only SQL) - это ряд технологий, подходов, проектов направленных на реализацию моделей баз данных, имеющих существенные отличия от традиционных СУБД, работающих с языком SQL. Концепция NoSQL не отрицает SQL, она лишь стремится решить проблемы и вопросы, с которыми не достаточно хорошо справляется РСУБД. Чаще всего данные в NoSQL решении представляются в виде хеш-таблиц, деревьев, документов и пр.
Какие есть типы хранилищ данных в NoSQL?¶
В зависимости от модели данных и подходов к распределённости и репликации можно выделить четыре типа хранилищ:
- "ключ-значение" (key-value store)
- документно-ориентированные (document store)
- хранилища семейств колонок (column database)
- графовые базы данных (graph database)
Что такое MongoDB?¶
MongoDb - это документо-ориентированная база данных, в отличие от традиционных реляционных баз данных, таких как MySQL или PostgreSQL не использует табличный способ представления со связями через внешние ключи, основанная на принципе хранении документов в BSON формате. Т.е. каждая запись это документ, без жестко заданной схемы, который может содержать вложенные документы.
На каком языке написана MongoDB?¶
MongoDB написана и реализована на С++.
Какие языки программирования можно использовать с MongoDB?¶
Клиентские драйверы MongoDB поддерживают все популярные языки программирования, так что выбор языка не является проблемой. Вы можете использовать любой язык, какой хотите.
Использует ли таблицы для хранения данных, база данных MongoDB?¶
Нет. Для хранения данных вместо таблиц, MongoDB использует "Коллекции" (collections).
Какие преимущества MongoDB?¶
Основные возможности MongoDB:
- Документо-ориентированное хранилище (простая и мощная JSON-подобная схема данных)
- Достаточно гибкий язык для формирования запросов
- Динамические запросы
- Полная поддержка индексов
- Профилирование запросов
- Быстрые обновления "на месте"
- Эффективное хранение двоичных данных больших объёмов, напр., фото и видео
- Журналирование операций, модифицирующих данные в БД
- Поддержка отказоустойчивости и масштабируемости: асинхронная репликация, набор реплик и шардинг
- Может работать в соответствии с парадигмой MapReduce
- Имеет распределенный доступ к данным, расположенных на нескольких серверах
Какие недостатки MongoDB?¶
- Отсутствует оператор "join". Обычно данные могут быть организованы более денормализованным способом, но на разработчиков ложится дополнительная нагрузка по обеспечению непротиворечивости данных.
- Нет такого понятия, как "транзакция". Атомарность гарантируется только на уровне целого документа, т.е. частичное обновление документа произойти не может.
- Отсутствует понятие "изоляции". Любые данные, которые считываются одним клиентом, могут параллельно изменяться другим клиентом.
- Менее чем более стабильна, не рекомендовано использовать в биллинге.
- Требовательна к ресурсам - память и место на диске.
Что такое пространство имен в MongoDB?¶
Пространство имен в MongoDB это конкатенация имени базы данных и названия коллекции. Для например school.students, где school - имя базы данных и students - название коллекции.
Что такое репликация?¶
Репликация - это процесс синхронизации данных между несколькими серверами. Позволяет добиться большей масштабируемости, и повысить доступность и сохранность данных. Репликация также позволяет восстанавливать даные после сбоя аппаратного обеспечения. С помощью дополнительных копий данных, вы можете выделить один сервер для аварийного восстановления, отчетности или резервного копирования. MongoDB поддерживает 2 формы репликации:
- реплисеты(Replica Sets );
- ведущий-ведомый(Master-Slave).
Поддерживает ли MongoDB ограничения внешнего ключа(foreign key)?¶
Нет.
Как мы можем достичь primary key - foreign key отношения в MongoDB?¶
По умолчанию MongoDB не поддерживает primary key - foreign key отношения. Тем не менее, мы можем достичь этой концепции путем встраивания одного документа внутри другого. Для например документ "адрес" может быть встроен внутри документа "клиент".
Объясните структуру ObjectID в MongoDB.¶
ObjectID это 12-байт типа BSON, имеющий следующую структуру:.
- Первые 4 байта, представляющие секунды с эпохи Unix
- Следующие 3 байта являются идентификатором машины
- Следующие 2 байта являются идентификатором процесса
- Последние 3 байта ето случайная величина счетчика:
MongoDB использует ObjectID как значение по умолчанию поля _id каждого документа, который генерируется во время создания любого документа. ObjectID делает все поля _id уникальными. Для создания нового ObjectID используется следующий код: NewObjectId = ObjectId();
Если удалить документ из базыданных, удалится ли он с диска?¶
Да. Удаление документа из базы данных приведет к его удалению с диска.
Что такое индексы в MongoDB?¶
Индексы - ето специальная структура данных, которая хранит небольшую часть набора данных. Индекс сохраняет значение конкретного поля или набора полей, упорядоченных по величине поля, как указано в индексе. Индексы поддерживать эффективное выполнение запросов. Без индексов, MongoDB должна сканировать каждый документ коллекции, чтобы выбрать те документы, которые соответствуют оператору запроса. Это сканирование крайне неэффективно и требует от MongoDB обработки большого объема данных. Индексы в MongoDB работают схожим образом с индексами в реляционных базах данных: они ускоряют выборку и сортировку данных. Индексы создаются с помощью ensureIndex.
Сколько индексов создается по умолчанию в MongoDB для новой коллекции?¶
По умолчанию, MongoDB создает только _id для каждой коллекции.
Что такое скрытый запрос в MongoDB?¶
В соответствии с официальной документации MongoDB, скрытый запрос ето запрос в котором:
- все поля в запросе являются частью индекса используемого в запросе;
- все поля в запросе возвращаются в том же индексе.
Поддерживает ли MongoDB поиск текста?¶
Да. MongoDB поддерживает создание текстовых индексов для поддержки поиска текста внутри строки. Эта функция, была введена в версии 2.6.
Какая команда позволяет получить все индексы определенной коллекции?¶
db.collection.getIndexs()
Что такое Шардинг в MongoDB?¶
Шардинг - это подход к масштабируемости, когда отдельные части данных хранятся на разных серверах. Шардинг решает проблему горизонтального масштабирования. Примитивный пример: хранить данные пользователей, чьё имя начинается на буквы A-M на одном сервере, а остальных - на другом.
По умолчанию, MongoDB пишет и читает данные из primary и secondary наборов реплик. Правда это или ложь?¶
Ложь. MongoDB записывает данные только в primary набор реплик.
Почему MongoDB не является предпочтительным решением для 32-битных систем?¶
При работе с 32-разрядной сборкой MongoDB, общий размер хранилища для сервера, включая данные и индексы, составляет 2 гигабайта. По этой причине, не рекомендуеться развертывать MongoDB для продакшина на 32-разрядных машинах. Если вы используете 64-разрядную сборку MongoDB, практически нет никаких ограничений на размер хранилища.
Какая команда,позволяет проверить, являетесь ли вы на главном сервере или нет?¶
db.isMaster()
Что такое GridFS?¶
GridFS - это спецификация, определённая в базе данных MongoDB для хранения и извлечения файлов, размер которых превышает 16 Мб. Такое ограничение размера обусловлено использованием в MongoDB формата BSON. Согласно спецификации GridFS файл разбивается на несколько фрагментов (англ. chunks), каждый из которых не может быть больше, чем 255 Кб. Каждый такой фрагмент хранится как отдельный файл и к нему может быть осуществлён доступ как к отдельному файлу.
Для обеспечения корректной сборки разбитого на фрагменты файла GridFS хранит коллекцию метаданных - отдельных файлов, содержащих информацию о хранящихся в файловой системе документах.
Что такое Map/Reduce?¶
Map/Reduce - это подход к обработке больших объемов данных, который состоит из двух фаз: Map - предварительная обработка входных данных и Reduce - обработка тем или иным способом выборки, полученной на стадии Map. Map/Reduce не является свойством исключительно NoSQL-решений. Аналогичным образом можно работать с большими объемами данных и в РСУБД. Но большинство NoSQL-систем (за исключением, может быть, самых простых key-value хранилищ) реализуют Map/Reduce в том или ином виде.
Map/Reduce имеет два серьёзных преимущества по сравнению с традиционными решениями. Первое и самое главное преимущество - это производительность. Теоретически MapReduce может быть распараллелен, что позволяет обрабатывать огромные массивы данных на множестве ядер/процессоров/машин. Это пока не является преимуществом MongoDB. Вторым преимуществом MapReduce является возможность описывать обработку данных нормальным кодом. По сравнению с тем, что можно сделать с помощью SQL, возможности кода внутри MapReduce намного богаче и позволяют расширить рамки возможного даже без использования специализированных решений.
Каков создать/удалить коллекцию в MongoDB?¶
db.createCollection(name,options) - для создания коллекции в MongoDB
db.collection.drop() - для удаления коллекции в MongoDB
Какова роль профайлера в MongoDB?¶
Профайлера базы данных MongoDB показывает рабочие характеристики каждой операции с базой данных. Для примера вы можете найти запросы с помощью профилировщика которие на самом деле медленнее, чем они должны быть. Профайлер MongoDB можно включить с помощью следующего вызова: db.setProfilingLevel(2); чтобы выключить профайлер, нужно повторно вызвать setProfileLevel, только передав 0 в качестве аргумента.
Какая команда позволяет вставить документ?¶
database.collection.insert(document) - для вставки документа в колекцию.
Приведите пример использования индекса в MongoDB.¶
Простой пример:
db.COLLECTION_NAME.ensureIndex({KEY: 1})
Какой метод вернёт список всех документов в колекции?¶
db.unicorns.find()
Что такое селекторы запросов в MongoDB?¶
Селектор - это JSON-объект, в простейшем случае это может быть даже {}, что означает выборку всех документов (аналогичным образом работает null). Селектор запросов MongoDB аналогичен предложению where SQL-запроса. Как таковой он используется для поиска, подсчёта, обновления и удаления документов из коллекций.
Что вы знаете об обновлении/вставке в MongoDB?¶
Один из приятных сюрпризов операции обновления - это возможность обновления/вставки (upsert от update - обновить и insert - вставить) Обновление/вставка обновляет документ, если он найден, или создаёт новый - если не найден. Обновление/вставка - полезная вещь в некоторых случаях; когда столкнётесь с подобным, сразу поймёте. Чтобы разрешить вставку при обновлении, установите третий параметр в true. Пример из жизни - счётчик посещений для веб-сайта. Если мы хотим в реальном времени видеть количество посещений страницы, мы должны посмотреть, существует ли запись, и - в зависимости от результата - выполнить update либо insert.
Что вы знаете об условных оператораторах в MongoDB?¶
В MongoDB в запросах можно использовать условные:
- $gt - больше чем
- $lt - меньше чем
- $gte - больше или равно
- $lte - меньше или равно
- $ne - извлекает все документы, не соответствующие некоторому условию
- $or - определяет набор пар ключ-значение, которые должны иметься в документе. И если документ имеет хоть одну такую пару ключ-значение, то он соответствует данному запросу и извлекается из бд
- $size - используется для нахождения документов, в которых массивы имеют число элементов, равным значению $size
- $exists - позволяет извлечь только те документы, в которых определенный ключ присутствует или отсутствует
- $regex - задает регулярное выражение, которому должно соответствовать значение поля
Поиск по массивам и операторы $in, $nin, $all
- $in - определяет массив возможных выражений и ищет те ключи, значение которых имеется в массиве
- $nin - определяет массив возможных выражений и ищет те ключи, значение которых отсутствует в этом массиве
- $all - похож на $in: он также определяет массив возможных выражений, но требует, чтобы документы имели весь определяемый набор выражений
Примеры использования:
Как удалить документ в MongoDB?¶
Для удаления документов в MongoDB предусмотрен метод remove:
db.users.remove({name: "Tom"})
В итоге все найденные документы с name=Tom будут удалены.
Updated by Александр Александров over 5 years ago · 2 revisions
Go to top