Проект

Общее

Профиль

MONGODB » История » Версия 2

Александр Александров, 26.04.2019 16:48

1 1 Александр Александров
h1. MONGODB
2
3
h2. Вопросы
4
5
# Что такое NoSQL?
6 2 Александр Александров
# Какие есть типы хранилищ данных в NoSQL?
7 1 Александр Александров
# Что такое MongoDB?
8
# На каком языке написана MongoDB?
9
# Какие языки программирования можно использовать с MongoDB?
10
# Использует ли таблицы для хранения данных, база данных MongoDB?
11
# Какие преимущества MongoDB?
12
# Какие недостатки MongoDB?
13
# Что такое пространство имен в MongoDB?
14
# Что такое репликация?
15
# Поддерживает ли MongoDB ограничения внешнего ключа(foreign key)?
16
# Как мы можем достичь primary key - foreign key отношения в MongoDB?
17
# Объясните структуру ObjectID в MongoDB.
18
# Если удалить документ из базыданных, удалится ли он с диска?
19
# Что такое индексы в MongoDB?
20
# Сколько индексов создается по умолчанию в MongoDB для новой коллекции?
21
# Что такое скрытый запрос в MongoDB?
22
# Поддерживает ли MongoDB поиск текста?
23
# Какая команда позволяет получить все индексы определенной коллекции?
24
# Что такое Шардинг в MongoDB?
25
# По умолчанию, MongoDB пишет и читает данные из primary и secondary наборов реплик. Правда ето или ложь?
26
# Почему MongoDB не является предпочтительным решением для 32-битных систем?
27
# Какая команда,позволяет проверить, являетесь ли вы на главном сервере или нет?
28
# Что такое GridFS?
29
# Что такое Map/Reduce?
30
# Каков создать/удалить коллекцию в MongoDB?
31
# Какова роль профайлера в MongoDB?
32
# Какая команда позволяет вставить документ?
33
# Приведите пример использования индекса в MongoDB.
34
# Какой метод вернёт список всех документов в колекции?
35
# Что такое селекторы запросов в MongoDB?
36
# Что вы знаете об обновлении/вставке в MongoDB?
37
# Что вы знаете об условных оператораторах в MongoDB?
38
# Как удалить документ в MongoDB?
39
40
h2. Ответы
41
42
h3. Что такое NoSQL?
43
44 2 Александр Александров
NoSQL (Not only SQL) - это ряд технологий, подходов, проектов направленных на реализацию моделей баз данных, имеющих существенные отличия от традиционных СУБД, работающих с языком SQL. Концепция NoSQL не отрицает SQL, она лишь стремится решить проблемы и вопросы, с которыми не достаточно хорошо справляется РСУБД. Чаще всего данные в NoSQL решении представляются в виде хеш-таблиц, деревьев, документов и пр.
45
46
h3. Какие есть типы хранилищ данных в NoSQL?
47
48
В зависимости от модели данных и подходов к распределённости и репликации можно выделить четыре типа хранилищ:
49
50
* "ключ-значение" (key-value store)
51
* документно-ориентированные (document store)
52
* хранилища семейств колонок (column database)
53
* графовые базы данных (graph database)
54
55 1 Александр Александров
h3. Что такое MongoDB?
56
57 2 Александр Александров
MongoDb - это документо-ориентированная база данных, в отличие от традиционных реляционных баз данных, таких как MySQL или PostgreSQL не использует табличный способ представления со связями через внешние ключи, основанная на принципе хранении документов в BSON(Binary JSON) формате. Т.е. каждая запись это документ, без жестко заданной схемы, который может содержать вложенные документы.
58
59 1 Александр Александров
h3. На каком языке написана MongoDB?
60
61 2 Александр Александров
MongoDB написана и реализована на С++.
62
63 1 Александр Александров
h3. Какие языки программирования можно использовать с MongoDB?
64
65 2 Александр Александров
Клиентские драйверы MongoDB поддерживают все популярные языки программирования, так что выбор языка не является проблемой. Вы можете использовать любой язык, какой хотите.
66
67 1 Александр Александров
h3. Использует ли таблицы для хранения данных, база данных MongoDB?
68
69 2 Александр Александров
Нет. Для хранения данных вместо таблиц, MongoDB использует "Коллекции" (collections).
70 1 Александр Александров
71
h3. Какие преимущества MongoDB?
72
73 2 Александр Александров
Основные возможности MongoDB:
74
75
* Документо-ориентированное хранилище (простая и мощная JSON-подобная схема данных)
76
* Достаточно гибкий язык для формирования запросов
77
* Динамические запросы
78
* Полная поддержка индексов
79
* Профилирование запросов
80
* Быстрые обновления "на месте"
81
* Эффективное хранение двоичных данных больших объёмов, напр., фото и видео
82
* Журналирование операций, модифицирующих данные в БД
83
* Поддержка отказоустойчивости и масштабируемости: асинхронная репликация, набор реплик и шардинг
84
* Может работать в соответствии с парадигмой MapReduce
85
* Имеет распределенный доступ к данным, расположенных на нескольких серверах
86
87 1 Александр Александров
h3. Какие недостатки MongoDB?
88
89 2 Александр Александров
* Отсутствует оператор "join". Обычно данные могут быть организованы более денормализованным способом, но на разработчиков ложится дополнительная нагрузка по обеспечению непротиворечивости данных.
90
* Нет такого понятия, как "транзакция". Атомарность гарантируется только на уровне целого документа, т.е. частичное обновление документа произойти не может.
91
* Отсутствует понятие "изоляции". Любые данные, которые считываются одним клиентом, могут параллельно изменяться другим клиентом.
92
* Менее чем более стабильна, не рекомендовано использовать в биллинге.
93
* Требовательна к ресурсам - память и место на диске.
94
95 1 Александр Александров
h3. Что такое пространство имен в MongoDB?
96
97 2 Александр Александров
Пространство имен в MongoDB это конкатенация имени базы данных и названия коллекции. Для например school.students, где school - имя базы данных и students - название коллекции.
98
99 1 Александр Александров
h3. Что такое репликация?
100
101 2 Александр Александров
Репликация - это процесс синхронизации данных между несколькими серверами. Позволяет добиться большей масштабируемости, и повысить доступность и сохранность данных. Репликация также позволяет восстанавливать даные после сбоя аппаратного обеспечения. С помощью дополнительных копий данных, вы можете выделить один сервер для аварийного восстановления, отчетности или резервного копирования. MongoDB поддерживает 2 формы репликации:
102
103
* реплисеты(Replica Sets );
104
* ведущий-ведомый(Master-Slave).
105
106 1 Александр Александров
h3. Поддерживает ли MongoDB ограничения внешнего ключа(foreign key)?
107
108 2 Александр Александров
Нет.
109
110 1 Александр Александров
h3. Как мы можем достичь primary key - foreign key отношения в MongoDB?
111
112 2 Александр Александров
По умолчанию MongoDB не поддерживает primary key - foreign key отношения. Тем не менее, мы можем достичь этой концепции путем встраивания одного документа внутри другого. Для например документ "адрес" может быть встроен внутри документа "клиент".
113
114 1 Александр Александров
h3. Объясните структуру ObjectID в MongoDB.
115
116 2 Александр Александров
ObjectID это 12-байт типа BSON, имеющий следующую структуру:.
117
118
* Первые 4 байта, представляющие секунды с эпохи Unix
119
* Следующие 3 байта являются идентификатором машины
120
* Следующие 2 байта являются идентификатором процесса
121
* Последние 3 байта ето случайная величина счетчика:
122
123
MongoDB использует ObjectID как значение по умолчанию поля _id каждого документа, который генерируется во время создания любого документа. ObjectID делает все поля _id уникальными. Для создания нового ObjectID используется следующий код: NewObjectId = ObjectId();
124
125 1 Александр Александров
h3. Если удалить документ из базыданных, удалится ли он с диска?
126
127 2 Александр Александров
Да. Удаление документа из базы данных приведет к его удалению с диска.
128
129 1 Александр Александров
h3. Что такое индексы в MongoDB?
130
131 2 Александр Александров
Индексы - ето специальная структура данных, которая хранит небольшую часть набора данных. Индекс сохраняет значение конкретного поля или набора полей, упорядоченных по величине поля, как указано в индексе. Индексы поддерживать эффективное выполнение запросов. Без индексов, MongoDB должна сканировать каждый документ коллекции, чтобы выбрать те документы, которые соответствуют оператору запроса. Это сканирование крайне неэффективно и требует от MongoDB обработки большого объема данных. Индексы в MongoDB работают схожим образом с индексами в реляционных базах данных: они ускоряют выборку и сортировку данных. Индексы создаются с помощью ensureIndex.
132
133 1 Александр Александров
h3. Сколько индексов создается по умолчанию в MongoDB для новой коллекции?
134
135 2 Александр Александров
По умолчанию, MongoDB создает только _id для каждой коллекции.
136
137 1 Александр Александров
h3. Что такое скрытый запрос в MongoDB?
138
139 2 Александр Александров
В соответствии с официальной документации MongoDB, скрытый запрос ето запрос в котором:
140
141
* все поля в запросе являются частью индекса используемого в запросе;
142
* все поля в запросе возвращаются в том же индексе.
143
144 1 Александр Александров
h3. Поддерживает ли MongoDB поиск текста?
145
146 2 Александр Александров
Да. MongoDB поддерживает создание текстовых индексов для поддержки поиска текста внутри строки. Эта функция, была введена в версии 2.6.
147
148 1 Александр Александров
h3. Какая команда позволяет получить все индексы определенной коллекции?
149
150 2 Александр Александров
<pre>
151
db.collection.getIndexs()
152
</pre>
153
154 1 Александр Александров
h3. Что такое Шардинг в MongoDB?
155
156 2 Александр Александров
Шардинг - это подход к масштабируемости, когда отдельные части данных хранятся на разных серверах. Шардинг решает проблему горизонтального масштабирования. Примитивный пример: хранить данные пользователей, чьё имя начинается на буквы A-M на одном сервере, а остальных - на другом.
157 1 Александр Александров
158 2 Александр Александров
h3. По умолчанию, MongoDB пишет и читает данные из primary и secondary наборов реплик. Правда это или ложь?
159
160
Ложь. MongoDB записывает данные только в primary набор реплик.
161
162 1 Александр Александров
h3. Почему MongoDB не является предпочтительным решением для 32-битных систем?
163
164 2 Александр Александров
При работе с 32-разрядной сборкой MongoDB, общий размер хранилища для сервера, включая данные и индексы, составляет 2 гигабайта. По этой причине, не рекомендуеться развертывать MongoDB для продакшина на 32-разрядных машинах. Если вы используете 64-разрядную сборку MongoDB, практически нет никаких ограничений на размер хранилища.
165
166 1 Александр Александров
h3. Какая команда,позволяет проверить, являетесь ли вы на главном сервере или нет?
167
168 2 Александр Александров
<pre>
169
db.isMaster()
170
</pre>
171
172 1 Александр Александров
h3. Что такое GridFS?
173
174 2 Александр Александров
GridFS - это спецификация, определённая в базе данных MongoDB для хранения и извлечения файлов, размер которых превышает 16 Мб. Такое ограничение размера обусловлено использованием в MongoDB формата BSON. Согласно спецификации GridFS файл разбивается на несколько фрагментов (англ. chunks), каждый из которых не может быть больше, чем 255 Кб. Каждый такой фрагмент хранится как отдельный файл и к нему может быть осуществлён доступ как к отдельному файлу.
175
176
Для обеспечения корректной сборки разбитого на фрагменты файла GridFS хранит коллекцию метаданных - отдельных файлов, содержащих информацию о хранящихся в файловой системе документах.
177
178 1 Александр Александров
h3. Что такое Map/Reduce?
179
180 2 Александр Александров
Map/Reduce - это подход к обработке больших объемов данных, который состоит из двух фаз: Map - предварительная обработка входных данных и Reduce - обработка тем или иным способом выборки, полученной на стадии Map. Map/Reduce не является свойством исключительно NoSQL-решений. Аналогичным образом можно работать с большими объемами данных и в РСУБД. Но большинство NoSQL-систем (за исключением, может быть, самых простых key-value хранилищ) реализуют Map/Reduce в том или ином виде.
181
182
Map/Reduce имеет два серьёзных преимущества по сравнению с традиционными решениями. Первое и самое главное преимущество - это производительность. Теоретически MapReduce может быть распараллелен, что позволяет обрабатывать огромные массивы данных на множестве ядер/процессоров/машин. Это пока не является преимуществом MongoDB. Вторым преимуществом MapReduce является возможность описывать обработку данных нормальным кодом. По сравнению с тем, что можно сделать с помощью SQL, возможности кода внутри MapReduce намного богаче и позволяют расширить рамки возможного даже без использования специализированных решений.
183
184 1 Александр Александров
h3. Каков создать/удалить коллекцию в MongoDB?
185
186 2 Александр Александров
db.createCollection(name,options) - для создания коллекции в MongoDB
187
db.collection.drop() - для удаления коллекции в MongoDB
188
189 1 Александр Александров
h3. Какова роль профайлера в MongoDB?
190
191 2 Александр Александров
Профайлера базы данных MongoDB показывает рабочие характеристики каждой операции с базой данных. Для примера вы можете найти запросы с помощью профилировщика которие на самом деле медленнее, чем они должны быть. Профайлер MongoDB можно включить с помощью следующего вызова: db.setProfilingLevel(2); чтобы выключить профайлер, нужно повторно вызвать setProfileLevel, только передав 0 в качестве аргумента.
192
193 1 Александр Александров
h3. Какая команда позволяет вставить документ?
194
195 2 Александр Александров
database.collection.insert(document) - для вставки документа в колекцию.
196
197 1 Александр Александров
h3. Приведите пример использования индекса в MongoDB.
198
199 2 Александр Александров
Простой пример:
200
201
<pre>
202
db.COLLECTION_NAME.ensureIndex({KEY: 1})
203
</pre>
204
205 1 Александр Александров
h3. Какой метод вернёт список всех документов в колекции?
206
207 2 Александр Александров
<pre>
208
db.unicorns.find()
209
</pre>
210
211 1 Александр Александров
h3. Что такое селекторы запросов в MongoDB?
212
213 2 Александр Александров
Селектор - это JSON-объект, в простейшем случае это может быть даже {}, что означает выборку всех документов (аналогичным образом работает null). Селектор запросов MongoDB аналогичен предложению where SQL-запроса. Как таковой он используется для поиска, подсчёта, обновления и удаления документов из коллекций.
214
215 1 Александр Александров
h3. Что вы знаете об обновлении/вставке в MongoDB?
216
217 2 Александр Александров
Один из приятных сюрпризов операции обновления - это возможность обновления/вставки (upsert от update - обновить и insert - вставить) Обновление/вставка обновляет документ, если он найден, или создаёт новый - если не найден. Обновление/вставка - полезная вещь в некоторых случаях; когда столкнётесь с подобным, сразу поймёте. Чтобы разрешить вставку при обновлении, установите третий параметр в true. Пример из жизни - счётчик посещений для веб-сайта. Если мы хотим в реальном времени видеть количество посещений страницы, мы должны посмотреть, существует ли запись, и - в зависимости от результата - выполнить update либо insert.
218
219 1 Александр Александров
h3. Что вы знаете об условных оператораторах в MongoDB?
220
221 2 Александр Александров
В MongoDB в запросах можно использовать условные:
222
223
* $gt - больше чем
224
* $lt - меньше чем
225
* $gte - больше или равно
226
* $lte - меньше или равно
227
* $ne - извлекает все документы, не соответствующие некоторому условию
228
* $or - определяет набор пар ключ-значение, которые должны иметься в документе. И если документ имеет хоть одну такую пару ключ-значение, то он соответствует данному запросу и извлекается из бд
229
* $size - используется для нахождения документов, в которых массивы имеют число элементов, равным значению $size
230
* $exists - позволяет извлечь только те документы, в которых определенный ключ присутствует или отсутствует
231
* $regex - задает регулярное выражение, которому должно соответствовать значение поля
232
233
Поиск по массивам и операторы $in, $nin, $all
234
235
* $in - определяет массив возможных выражений и ищет те ключи, значение которых имеется в массиве
236
* $nin - определяет массив возможных выражений и ищет те ключи, значение которых отсутствует в этом массиве
237
* $all - похож на $in: он также определяет массив возможных выражений, но требует, чтобы документы имели весь определяемый набор выражений
238
239
Примеры использования:
240
241
{{dmsf_image(367)}}
242
243 1 Александр Александров
h3. Как удалить документ в MongoDB?
244 2 Александр Александров
245
Для удаления документов в MongoDB предусмотрен метод remove:
246
247
db.users.remove({name: "Tom"})
248
249
В итоге все найденные документы с name=Tom будут удалены.
Go to top