Вопросы и ответы для собеседования по MongoDB
MongoDB – это документоориентированная система управления базами данных, которая хранит данные в документах JSON. Она работает на основе концепции документов и коллекций. MongoDB может хранить несколько баз данных и обеспечивае высокую производительность, помимо масштабируемости и избыточности. Эта статья предназначена для того, чтобы дать вам основные представления о типе вопросов для собеседований, с которыми вы можете столкнуться.
Обычно на собеседованиях рекрутеры начинают с базовых вопросов и постепенно повышают уровень сложности. Итак, в этой статье мы также сначала рассмотрим лёгкие вопросы, а затем перейдем к более сложным. С помощью этих специально подобранных вопросов для собеседования по MongoDB вы можете подготовиться к собеседованию при приеме на работу.
1) Что такое MongoDB?
MongoDB – это кроссплатформенная база данных на основе документов. MongoDB, классифицируемая как база данных NoSQL, избегает традиционной таблично-ориентированной структуры реляционной базы данных, поддерживая документы, подобные JSON, с динамическими схемами, что ускоряет и упрощает интеграцию данных в определенные типы приложений.
MongoDB был разработан компанией-разработчиком программного обеспечения “10gen” в октябре 2007 года как элемент планируемой платформы в качестве сервисного продукта. После этого, в 2009 году, компания перешла на бесплатную модель развертывания, предоставляя помощь в продажах и другие услуги.
2) Каковы особенности MongoDB?
Ниже приведен ряд особенностей MongoDB:
- Совместимая модель данных в формате документов.
- Гибкая и чрезвычайно масштабируемая база данных.
- Быстрее, чем традиционные базы данных.
- Демонстративный язык запросов.
3) К какому типу базы данных NoSQL относится MongoDB?
MongoDB – это база данных, ориентированная на документы. Она хранит данные в виде структурно-ориентированных баз данных BSON. Мы храним эти документы в коллекции.
4) Что такое пространство имен?
Пространство имен – это объединение имени базы данных и имени коллекции.
5) В чём заключается различие между MongoDB и MySQL?
Несмотря на то, что MySQL и MongoDB являются бесплатными базами данных с открытым исходным кодом, между ними есть несколько различий с точки зрения взаимосвязи данных, транзакций, скорости выполнения, запроса данных, разработки схемы, нормализации и т.д. Сравнение между MongoDB и MySQL аналогично сравнению между нереляционными и реляционными базами данных.
6) Что такое индексы в MongoDB?
В MongoDB мы используем индексы для эффективного выполнения запросов; без использования индексов MongoDB должен выполнять сканирование коллекции, т. е. сканировать все документы коллекции, для выбора документов, которые соответствуют инструкции запроса. Если для запроса доступен подходящий индекс, MongoDB будет использовать индекс для ограничения количества документов, которые он должен проверять.
7) Почему MongoDB – лучшая база данных NoSQL?
MongoDB является лучшей базой данных NoSQL благодаря следующим особенностям:
- Высокая Производительность
- Высокая доступность
- Легкая масштабируемость
- Богатый язык запросов
- Ориентированность на документы
8) Объясните, зачем нужен закрытый запрос?
Закрытый запрос ускоряет реализацию запроса, поскольку мы храним индексы в оперативной памяти или последовательно размещаем их на диске. Это ускоряет выполнение запроса. Закрытый запрос охватывает все поля в индексе, MongoDB соответствует условию запроса и возвращает поля результата.
9) Что такое Реплики?
Мы можем указать реплику как набор экземпляров mongo, в которых размещен аналогичный набор данных. В наборе реплик один узел будет основным, а другой – вторичным. Мы реплицируем все данные с первичного узла на вторичный.
10) В чём заключается отличие между MongoDB и Cassandra?
11) Объясните, что такое набор первичных и вторичных реплик?
В MongoDB первичные реплики – это узлы, которые принимают запись. Первичные реплики также называются главными репликами. Следовательно, только одна реплика будет принимать операции записи одновременно.
Первичная реплика — главный сервер, который взаимодействует с клиентом и выполняет все операции чтения/записи. Вторичные реплики сохраняют копию данных первичной реплики с помощью встроенной репликации.
12) Какие языки мы можем использовать с MongoDB?
В настоящее время MongoDB предлагает поддержку драйверов для C ++, Java, PHP, Perl, Python, Go, Scala и Ruby.
13) Что такое шифрование диска?
Шифрование диска кодирует все данные MongoDB в хранилище или в операционных системах для обеспечения доступа к защищенным данным только аутентифицированных процессов.
14) Объясните, что такое основные и вторичные наборы реплик?
Набор первичных реплик получает все операции записи от клиентов. Наборы вторичных реплик реплицируют наборы первичных реплик и реализуют операции для своих наборов данных, чтобы вторичные наборы данных влияли на первичные.
15) В чем важность GridFS и ведения журнала?
- GridFS: мы используем GridFS для извлечения и хранения больших файлов, таких как изображения, видео и аудиофайлы.
- Ведение журнала: мы используем ведение журнала для безопасного резервного копирования в MongoDB.
16) Как выполнить блокировку или транзакции в MongoDB?
MongoDB не использует традиционную блокировку, потому что она быстродействующая, понятная и легкая в изложении. Мы можем рассматривать ее как MyISAM, скрипт автоматического управления MySQL. Благодаря упрощению бизнес-среды мы можем повысить производительность, особенно в структуре с различными серверами.
17) Как осуществлять журналирование в MongoDB?
Мы сохраняем операции записи в памяти во время журналирования. Файлы журналов на диске являются надежными. В пути к базе данных MongoDB создает подкаталог журнала.
18) Как MongoDB обеспечивает параллелизм?
MongoDB использует блокировки чтения и записи, позволяя одновременным читателям получать доступ к любому источнику, такому как коллекция или база данных, хотя он предоставляет частный доступ отдельным авторам.
19) Объясните сегментирование и агрегирование в MongoDB?
- Агрегирование: Агрегирование – это действия, которые обрабатывают записи данных и дают рекордные результаты.
- Сегментирование: Сегментирование означает хранение данных на нескольких компьютерах.
20) В чем важность профилировщика в MongoDB?
MongoDB содержит профилировщик базы данных, который показывает характеристики производительности каждой операции с базой данных. С помощью профилировщика мы можем определить запросы, которые выполняются медленнее, чем должны.
21) Что такое коллекция?
Коллекция представляет собой набор документов MongoDB.
22) Что такое конвейер агрегации?
Конвейер агрегации действует как платформа для выполнения задач агрегирования. Мы используем этот конвейер для преобразования документов в агрегированные результаты.
23) Что такое MapReduce?
MapReduce – это стандартный многофазный метод агрегирования данных, который мы используем для обработки объемов данных.
24) Что такое Разделение?
Разделение – это фоновый процесс, который мы используем для хранения фрагментов, не допускающих слишком большого увеличения.
25) Что делает метод save()?
Мы используем метод save() для замены существующих документов новыми документами.
26) В чем польза MongoDB?
- Как правило, мы используем MongoDB в качестве основного хранилища данных для оперативных требований и реальных потребностей. MongoDB подходит для 80% приложений, которые мы разрабатываем сегодня. MongoDB прост в эксплуатации и расширяется способами, которые сложно реализовать, если они невозможны с реляционными базами данных.
- MongoDB выделяется в различных вариантах использования, где реляционные базы данных не подходят, например, в приложениях с неполной структурой, а также с большими потребностями в масштабируемости или при развертывании в нескольких центрах обработки данных.
- MongoDB не подходит для некоторых приложений. Например, приложения, которым требуются сложные транзакции, и приложения на основе сканирования, которые получают доступ к огромным наборам данных, в основном не подходят для MongoDB.
- Некоторые общие области использования MongoDB включают каталоги продуктов, мобильные приложения, управление контентом, персонализацию в режиме реального времени и приложения, обеспечивающие индивидуальный просмотр в нескольких системах.
27) Что делает команда DB?
Мы используем команду “DB”, чтобы получить имя выбранной в данный момент базы данных.
28) Каковы ограничения 32-разрядных версий MongoDB?
Когда мы запускаем 32-разрядную версию MongoDB, общий размер хранилища сервера, содержащего индексы и данные, составляет 2 ГБ. По этой причине мы не будем внедрять MongoDB в производство на 32-разрядных машинах. Если мы внедрим 64-разрядную версию MongoDB, виртуальных ограничений на размер хранилища не будет. Для развертывания мы настоятельно рекомендуем 64-разрядные операционные системы и сборки.
29) Когда нам следует нормализовать данные в MongoDB?
Это зависит от наших целей. Нормализация обеспечивает обновленное эффективное представление данных. Денормализация повышает эффективность чтения данных. Как правило, мы используем встроенные модели данных, когда:
- Когда у нас есть отношения “contains” между объектами.
- Когда у нас есть отношения “один ко многим” между объектами. В отношениях ”многие” или дочерние документы отображаются в контексте родительских документов.
Как правило, мы используем нормализованные модели данных:
- Хотя встраивание приводит к дублированию данных, оно все же не дает достаточных преимуществ в производительности чтения, чтобы превалировать над последствиями дублирования.
- Для представления более сложных отношений “многие ко многим”.
- Для моделирования больших иерархических наборов данных.
30) Как мы выполняем сортировку и поиск в MongoDB?
Для поиска любых данных в MongoDB мы используем метод find() . Метод discovery () возвращает документы коллекции, для которой мы вызвали этот метод. Мы можем использовать “Where” в запросе MongoDB, чтобы ограничить вывод с помощью проекции MongoDB. Каждый раз, когда мы выполняем метод find(), MongoDB возвращает все документы, связанные с определенной коллекцией.
db.<collection_name>.find({ }, {<key_Name>:<Flag to display>})
31) Как MongoDB может имитировать подзапрос или присоединение?
Мы должны найти наилучший метод структурирования данных в MongoDB для имитации простого подзапроса или объединения в SQL. Например, у нас есть пользователи и посты, причем пользователи в одной коллекции, а посты в другой. Нам нужно найти все посты пользователей, чей город “Хайдарабад”.
32) Что такое oplog (операционный журнал)?
Операционный журнал (oplog) – это особый вид ограниченной коллекции, в которой хранится текущая запись всех операций, которые изменяют данные, которые мы храним в наших базах данных. Прежде всего, он применяет все операции с базой данных, а затем записывает эти операции в oplog. После этого вторичные участники реплицируют и применяют операции в асинхронном процессе.
33) Как создать базу данных в MongoDB?
Когда я хотел создать базу данных в MongoDB, я столкнулся со следующей ошибкой:
:~$mongo
MongoDB shell version:1.65
Connecting to: test
Error: Could not connect to the server
Exception: connect failed
Решение вышеуказанной ошибки:
- cd / var1 / lib1 /MongoDB
- Мы удаляем mongod. и блокируем папку
- Sudo запускает MongoDB
- Mongo
34) Каков синтаксис метода skip()?
Ниже представлен синтаксис метода skip():
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
35) Как нам удалить все из базы данных MongoDB?
Используя следующий код, мы можем удалить все из базы данных MongoDB:
use [database];
db.dropDatabase();
Ruby code should be pretty similiar.
Also, from the command line:
mongo [Database] -eval "db.dropDatabase();"
use
[databaseName]
db.Drop+databasename();
drop colllection
use databaseName
db.collectionName.drop();
36) Какую команду мы используем для создания резервной копии базы данных?
Для создания резервной копии базы данных мы используем команду mongodump.
37) Какую команду мы используем для восстановления резервной копии?
Мы используем команду mongorestore для восстановления резервной копии.
38) Объясните важность обозначения точками?
В MongoDB мы используем точечную нотацию для доступа к элементам массива и полям встроенного документа.
39) Каков синтаксис методов limit() и sort()?
Синтаксис метода limit():
>db.COLLECTION_NAME.find().limit(NUMBER)
Синтаксис метода sort():
>db.COLLECTION_NAME.find().sort({KEY:1})
40) Что вы знаете о базах данных NoSQL? Каковы типы баз данных NoSQL?
NoSQL означает “Не только SQL”. NoSQL – это разновидность базы данных, которая обрабатывает и сортирует все виды структурированных, массивных и сложных данных. Это новый метод представления о базах данных. Виды баз данных NoSQL:
- Ключ-ценность
- График
- Ориентированные на колонки
- Ориентированные на документы
41) Какую команду мы используем для удаления базы данных?
Для удаления базы данных мы используем команду “DB.drop database”.
42) Объясните Проекцию в MongoDB
В MongoDB мы используем проекцию для выбора только необходимых данных. Она не будет выбирать все данные из документа.
43) Зачем мы используем метод pretty()?
Мы используем метод pretty() для отображения результатов в отформатированном виде.
44) Как удалить документ из коллекции?
Используя метод remove(), мы удаляем документ из коллекции.
45) Какие моменты мы должны учитывать при создании схемы в MongoDB?
При создании схемы мы должны учитывать следующие моменты:
- Разработка схемы на основе требований пользователя.
- Объединение объектов в один документ, если нам это необходимо.
- Выполняйте объединения во время записи, а не во время чтения.
- Для большинства общих сценариев применения разверните схему по максимуму.
- Выполните сложные агрегации в схеме.
46) Что содержит ObjectId?
ObjectId содержит следующее:
- Идентификатор клиентской машины
- Идентификатор процесса клиента
- Счетчик с увеличением в байт
- Временная метка
47) Как мы используем группу select * при агрегировании MongoDB?
Например, если нам нужно выбрать все атрибуты и группы по имени во всех записях. Например:
{Name: George, x: 5, y: 3}
{Name: George, z: 9}
{Name: Rob, x: 12, y: 2}
Мы можем выполнить агрегацию MongoDB следующим образом:
db.example.aggregate(
{
$group:{
_id:'$name',
x: {$addToSet: "$x" },
y: {$addToSet: "$y" },
z: {$addToSet: "$z" },
}
}
)
48) Объясните вертикальное и горизонтальное масштабирование?
- Вертикальное масштабирование: Вертикальное масштабирование увеличивает ресурсы хранилища и процессора для расширения емкости.
- Горизонтальное масштабирование: Горизонтальное масштабирование разделяет наборы данных и распространяет их по нескольким сегментам или серверам.
49) Каковы элементы Раздельного кластера?
Ниже приведены элементы Раздельного кластера:
- Маршрутизаторы запросов
- Фрагменты
- Настройка серверов
50) Чем можно заменить MongoDB?
Ниже приведены варианты, которыми можно заменить MongoDB:
- Hbase
- CouchDB
- Cassandra
- Redis
- Riak
51) Как мы можем удалить старые файлы в каталоге moveChunk?
В ходе общих операций балансировки сегментов мы создаем старые файлы в качестве резервных копий и можем удалить их после завершения этих операций.
52) Что такое механизм хранения данных?
Механизм хранения данных – это компонент базы данных, который отвечает за управление тем, как мы храним данные на диске. Например, один механизм хранения данных может обеспечивать лучшую производительность при нагрузках, связанных с чтением, а другой может поддерживать большую пропускную способность при операциях записи.
53) Требуется ли MongoDB много оперативной памяти?
Нет, MongoDB не требует большого количества оперативной памяти. Он может работать с небольшим объемом памяти. MongoDB динамически назначает и отменяет назначение оперативной памяти в соответствии с потребностями других процессов.
54) Чем отличаются MongoDB от CouchDB?
55) Объясните ограниченную коллекцию?
В MongoDB ограниченная коллекция – это особый вид коллекции. Он указывает на то, что в этой коллекции мы можем ограничить её размер. Синтаксис ограниченной коллекции выглядит следующим образом:
db.createCollection(<collection_name>, {capped: Boolean, autoIndexId: Boolean, size: Number, max : Number})
В синтаксисе ограниченной коллекции у нас есть следующие поля:
- collection_name: Это поле представляет собой название коллекции, которую мы создаем как ограниченную коллекцию.
- Capped: Ограничение – это логическое поле; оно имеет значение true, если мы создаем ограниченную коллекцию. По умолчанию его значение равно false .
- auto indexed: это логический флаг, который мы используем для автоматической индексации. Если этот флаг равен true, индексы будут создаваться автоматически. Если флаг равен false, индексы не будут создаваться автоматически.
- Size: Размер – это параметр, который представляет максимальный объем документов в байтах. Это обязательное поле в контексте коллекций с ограниченным объемом.
- Max: Max – это параметр, представляющий наибольшее количество документов, которые позволяет собирать.
56) Как мы выполняем операции Join в MongoDB?
Из MongoDB3.2 мы можем выполнить операцию объединения. Новый оператор $lookup, включенный в конвейер агрегирования, такой же, как и левое внешнее соединение. Пример:
{
$lookup:
{
from: <collection to join>,
localField: <field from the input documents>,
foreignField: <field from the documents of the "from" collection>,
as: <output array field>
}
}
57) Какие механизмы хранения данных использует MongoDB?
WiredTiger и MMAPv1 – это два механизма хранения данных, используемые MongoDB.
58) Как настроить размер кэша в MongoDB?
В MongoDB мы не можем настроить кэш. MongoDB автоматически использует свободные места в системе с помощью файлов, сопоставленных с памятью.
59) Как мы контролируем производительность MongoDB?
Мы можем контролировать производительность MongoDB с помощью:
- Фиксирование производительности
- Определение количества подключений
- Профилирование базы данных
- Постоянный сбор диагностических данных
60) Каковы агрегатные функции MongoDB?
Ниже приведены агрегатные функции MongoDB:
- AVG
- Sum
- Min
- Max
- First
- Push
- addTo Set
- Last
61) Каковы CRUD-операции MongoDB?
Ниже приведены CRUD-операции MongoDB:
Create-db.collection.insert();
Read-db.collection.find();
Update-db.collection.update();
Delete-db.collection.remove();
62) Какие типы данных существуют в MongoDB?
Ниже приведены типы данных MongoDB:
- Integer
- String
- Boolean
- Array
- Double
- Date
- Timestamp
- Regular Expression
63) Требуется ли вызывать “get last error” для обеспечения долговечности записи?
Нет, вызывать данную ошибку не требуется. Сервер действует так, как если бы она была вызвана. “get last error” позволяет нам получить подтверждение того, что операция записи совершена.
64) Что происходит, когда шардирование работает медленно или вовсе не работает во время запроса?
Когда шардирование выполняется медленно, запрос возвращает ошибку до тех пор, пока не будут исправлены его частичные параметры.
65) Как мы используем первичный ключ в MongoDB?
““_id field” не используется как первичный ключ в MongoDB. Оно является отдельным значением. Если мы ничего не внесём в поле “_id”, база данных будет систематически заполнять его. Тем не менее, мы можем хранить любую отдельную информацию в этом поле.
66) Как увидеть соединения, используемые MongoDB?
Чтобы просмотреть соединения, используемые MongoDB, мы используем db_adminCommand (”connPoolStats”).
67) Требуется ли очистка частично перенесенных документов при сбое ”moveChunk”?
Нет, очищать частично перемещенные документы не требуется, потому что перемещения блоков детерминированы и последовательны. Перемещение повторится, и по завершении данные будут в последнем сегменте.
68) Объясните, как запустить сервер MongoDB
Мы должны выполнить следующие шаги для запуска сервера MongoDB:
- Сначала откройте командную строку и запустите файл “mongod.exe”.
- Далее мы переходим к пути, по которому мы установили MongoDB.
- Перейдите в папку bin, найдите файл “mongod.exe” и дважды щелкните файл для его выполнения.
- Мы можем перейти в папку, например, “C: MongoDB/bin” и ввести mongo для подключения MongoDB с помощью командной строки.
69) Объясните различия между MongoDB и RDBMS
70) Как приложения получают доступ к изменениям данных в режиме реального времени в MongoDB?
Приложения получают доступ к изменениям данных в режиме реального времени через потоки изменений, которые служат подписчиками для каждой операции сбора данных, такой как удаление, вставка и обновление.
71) Какие различные типы индексов существуют в MongoDB?
Ниже приведены различные типы индексов в MongoDB:
- По умолчанию MongoDB создает “_id”.
- Составной: он полезен сразу для нескольких областей.
- Мультиключ: индексирует массив данных.
- Одно поле: Он сортирует и индексирует по одному полю.
- Геопространственный: Полезен для запроса данных о местоположении.
- Хэшированный: Индексирует хэши нескольких полей.
71) Что такое BSON?
Двоичный JSON или BSON – это формат JSON в двоичном кодировании. BSON расширяет JSON и предлагает различные поля и типы данных.
72) Как MongoDB хранит данные?
Поскольку это база данных, основанная на документах, MongoDB хранит документы в двоичной объектной нотации Javascript или BSON, которая представляет собой формат JSON с двоичной кодировкой.
73) Поддерживает ли MongoDB транзакции ACID? Как определить транзакцию ACID?
Да, MongoDB поддерживает транзакции ACID. ACID означает атомарность, согласованность, изоляцию и долговечность. Менеджер транзакций гарантирует, что мы обрабатываем эти атрибуты.
74) Объясните состав элементов или структуру ObjectId в MongoDB?
В MongoDB ObjectId связан с полем “_id”, и MongoDB использует его в качестве значения “_id” по умолчанию в документах. Для генерации “ObjectId” мы используем следующий синтаксис:
ObjectId([SomeHexaDecimalValue])
Пример:
ObjectId() = newObjectId
ObjectId использует следующие методы:
- Str: этот метод предоставляет строковое представление идентификатора объекта.
- valueOf() – этот метод возвращает шестнадцатеричное представление ObjectId.
- getTimestamp() – этот метод возвращает временную метку ObjectId.
- toString() – этот метод возвращает строковое представление ObjectId в “ObjectId(haxstring)”.
75) Как найти элементы массива, если нам известно несколько его критериев?
Например, у нас есть следующие документы:
{ _id: 1, numbers: [1000, -1000]]
{ _id: 2, numbers: [500]]
С помощью следующей команды мы найдём нужные нам элементы массива:
db.example.find( { numbers: { $elemMatch: { $gt: -10, $lt: 10 } } } );
76) Как мы можем отсортировать определяемую пользователем функцию? Например, x и y – это целые числа. Как нам вычислить результат выражения “x-y”?
Выполняя следующий код, мы вычислим выражение x-y.
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a – doc2.a
})
});
Versus the equivalent client-side sort:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a – doc2.b
});
С помощью конвейера агрегации и оператора “$ orderby” можно выполнять сортировку.
77) Как нам получить базы данных MongoDB в массиве Javascript?
В терминале MongoDB мы можем запустить “Show DBS” для извлечения существующих баз данных. Чтобы получить базы данных MongoDB программно, мы выполняем следующий код:
use admin
dbs = db.runCommand({listDatabases: 1})
dbNames = []
for (var i in dbs.databases) { dbNames.push(dbs.databases[i].name) }
Hopefully this will help someone else.
The below will create an array of the names of the database:
var connection = new Mongo();
var dbNames = connection.getDBNames();
78) Как обновить объект во вложенном массиве?
Выполняя следующий код, мы обновляем объект во вложенном массиве:
Skip code block
{
“_id” : ObjectId(“4faaba123412d654fe83hg876”),
“user_id” : 123456,
“total” : 100,
“items” : [
{
“item_name” : “my_item_one”,
“price” : 20
},
{
“item_name” : “my_item_two”,
“price” : 50
},
{
“item_name” : “my_item_three”,
“price” : 30
}
]
}
79) Как извлечь конкретный встроенный документ из коллекции MongoDB?
У меня есть коллекция, в которой есть встроенный документ, известный как “notes”.
Skip code block
{
“_id” : ObjectId(“4f7ee46e08403d063ab0b4f9”),
“name” : “MongoDB”,
“notes” : [
{
“title” : “Hello MongoDB”,
“content” : “Hello MongoDB”
},
{
“title” : “ReplicaSet MongoDB”,
“content” : “ReplicaSet MongoDB”
}
]
}
80) Как запросить вложенное соединение?
Для запроса вложенного соединения мы используем “testid”. Например:
{“_id” : ObjectId( “abcd” ),
“className” : “com.myUser”,
“reg” : 12345,
“test” : [
{ “className” : “com.abc”,
“testid” : “pqrs” } ] }
81) Можем ли мы запустить более одной операции Javascript в одном экземпляре MongoDB?
Да, мы можем запускать несколько операций javascript в одном экземпляре MongoDB.