Ответы на вопросы на собеседование 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(Binary JSON) формате. Т.е. каждая запись это документ, без жестко заданной схемы, который может содержать вложенные документы.
- На каком языке написана 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.
- Какая команда позволяет получить все индексы определенной коллекции?
- Что такое Шардинг в MongoDB?
Шардинг - это подход к масштабируемости, когда отдельные части данных хранятся на разных серверах. Шардинг решает проблему горизонтального масштабирования. Примитивный пример: хранить данные пользователей, чьё имя начинается на буквы A-M на одном сервере, а остальных - на другом.
- По умолчанию, MongoDB пишет и читает данные из primary и secondary наборов реплик. Правда ето или ложь?
Ложь. MongoDB записывает данные только в primary набор реплик.
- Почему MongoDB не является предпочтительным решением для 32-битных систем?
При работе с 32-разрядной сборкой MongoDB, общий размер хранилища для сервера, включая данные и индексы, составляет 2 гигабайта. По этой причине, не рекомендуеться развертывать MongoDB для продакшина на 32-разрядных машинах.Если вы используете 64-разрядную сборку MongoDB, практически нет никаких ограничений на размер хранилища.
- Какая команда,позволяет проверить, являетесь ли вы на главном сервере или нет?
- Что такое 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.
Простой пример:
- Какой метод вернёт список всех документов в колекции?
- Что такое селекторы запросов в 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: он также определяет массив возможных выражений, но требует, чтобы документы имели весь определяемый набор выражений
- Как удалить документ в MongoDB?
Для удаления документов в MongoDB предусмотрен метод remove:В итоге все найденные документы с name=Tom будут удалены.
Автор не работал на нормальном уровне с монго.
ОтветитьУдалитьдля оверьвью нормас статья
УдалитьОчень устаревшая статья, есть неправильные ответы.
ОтветитьУдалить