Ответы на вопросы на собеседование 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 - определяет массив возможных выражений и ищет те ключи, значение которых имеется в массиве
  • $nin - определяет массив возможных выражений и ищет те ключи, значение которых отсутствует в этом массиве
  • $all - похож на $in: он также определяет массив возможных выражений, но требует, чтобы документы имели весь определяемый набор выражений
Примеры использования:

  • Как удалить документ в MongoDB?

Для удаления документов в MongoDB предусмотрен метод remove:
В итоге все найденные документы с name=Tom будут удалены.

Рассказать друзьям:

3 коментарі :

  1. Автор не работал на нормальном уровне с монго.

    ОтветитьУдалить
  2. Очень устаревшая статья, есть неправильные ответы.

    ОтветитьУдалить