В этом курсе вы познакомитесь с MongoDB.Вы узнаете, как установить его и как управлять им через оболочку.Кроме того, вы узнаете, как получить программный доступ к нему через Java и как использовать Map Reduce с ним.Наконец, будут объяснены более сложные понятия, такие как шардинг и репликация.Проверьте это здесь !
В этой заключительной части руководства мы рассмотрим модель безопасности MongoDB , различные типы индексов, планы запросов и профилирование, серверные курсоры и массовые операции.
2. Безопасность
Функции безопасности MongoDB включают аутентификацию, авторизацию и аудит. Его основой является управление доступом на основе ролей с гибким набором привилегий. Стоит отметить, что MongoDB обеспечивает основу для пользовательских ролей, определяя набор встроенных ролей (более подробную информацию см. В официальной документации ). Как всегда, оболочка MongoDB предоставляет богатый набор командных помощников для настройки безопасности.
команда
Создать пользователя
параметры
01
02
03
04
05
06
07
08
09
10
{
createUser: <username>,
pwd: <password>,
customData: { <any information> },
roles: [
{ role: <role>, db: <database> } | <role>,
...
],
writeConcern: { <write concern> }
}
обертка
db.createUser (пользователь, writeConcern)
Описание
Команда создает нового пользователя с именем username в текущей базе данных. Если пользователь с таким именем уже существует, возникнет ошибка.
Команда обновляет данные пользователя с именем username в текущей базе данных. Обратите внимание, что обновление свойства полностью заменяет предыдущие значения свойства (включая обновления ролей пользователя).
пример
В оболочке MongoDB давайте createUser команду (чтобы обновить пользователя, созданного ранее командой createUser ):
Команда обновляет пароль для существующего пользователя с именем username .
пример
В оболочке MongoDB давайте createUser команду (чтобы удалить пользователя, ранее созданного командой createUser ): db.changeUserPassword("testuser", "newpassword")
Команда возвращает информацию об одном или нескольких пользователях в базе данных.
пример
В оболочке MongoDB давайте createUser команду (чтобы получить информацию о пользователе, ранее созданном командой createUser ): db.getUser("testuser") (или, альтернативно, db.getUsers() )
Команда обновляет пользовательскую роль с именем rolename в текущей базе данных. Обратите внимание, что обновление свойства полностью заменяет предыдущие значения свойства (включая обновления ролей и привилегий).
пример
В оболочке MongoDB давайте createRole команду (чтобы обновить роль, созданную ранее командой createRole ):
Команда позволяет пользователю проходить аутентификацию в базе данных из оболочки MongoDB или сеанса клиента.
пример
В оболочке MongoDB давайте createUser команду (для аутентификации сеанса с использованием пользователя, ранее созданного командой createUser ): db.auth( "testuser", "testpassword" )
Выбор правильных индексов может повысить производительность ваших запросов (и, следовательно, производительность приложений) в большинстве случаев.MongoDB поддерживает различные типы индексов для выбора:
_id : все коллекции имеют индекс в поле _id, которое существует по умолчанию
одиночное поле : индексы для одного поля документа, например {title>: 1}
составной индекс : индексы для нескольких полей, например: {«title»: 1, «price»: 1}
multikey index : индексы для контента, хранящегося в массивах, например
геопространственный индекс : 2d / 2sphere для поддержки эффективных геопространственных запросов, например: {«location»: «2d»}
текстовые индексы : индексы на строковом содержимом для поддержки полнотекстового поиска, например {title ”:“ text ”}
хешированные индексы : индексы для поддержки хеширования на основе хеша (подробнее см. в части 4. Руководства по монтированию MongoDB )
Кроме того, каждый индекс может быть определен как:
уникальные : повторяющиеся значения для индексированного поля будут отклонены
sparse : индекс содержит записи только для документов, имеющих индексированное поле
Для индексированных коллекций значения для индексированных полей имеют максимальный предел длины ключа индекса: общий размер записи индекса должен быть не более 1024 байтов (см. Раздел официальной документации по ограничениям и порогам ).
Для получения более подробной информации об индексации, пожалуйста, обратитесь к официальной документации .
4. Профилирование
MongoDB предоставляет очень полезный инструмент для сбора данных о производительности сервера: профилировщик базы данных. Он собирает подробные данные о запросах, операциях записи, курсорах и других командах базы данных на работающем экземпляре сервера. Профилирование можно включить на уровне экземпляра для каждой базы данных или для каждого сервера.
команда
Профиль
параметры
1
2
3
{
profile: <level>
}
обертка
db.setProfilingLevel (уровень, замедления)
Описание
Команда изменяет текущий уровень профилировщика, используемый системой профилирования базы данных для сбора данных о производительности. Параметр level имеет следующее значение:
-1 — Без изменений. Возвращает текущий уровень профиля.
0 — выкл. Нет профилирования.
1 — вкл. Включает только медленные операции.
2 — вкл. Включает в себя все операции.
пример
В оболочке MongoDB давайте db.setProfilingLevel(2) команду: db.setProfilingLevel(2)
Чтобы получить больше информации об анализе производительности операций с базой данных, пожалуйста, обратитесь к официальной документации .
5. Запрос кеша
Среди многих других новых функций MongoDB2.6 поддерживает новый набор команд для просмотра и управления кешем запросов:
перечислить все известные формы запроса
отображать кэшированные планы для формы запроса
удалить форму запроса из кэша
очистить весь кеш
Оптимизатор запросов выполняет запросы и выбирает наиболее эффективный план запроса для запроса с заданными индексами. Позднее этот план запроса используется каждый раз, когда выполняется запрос (с такой формой). Оптимизатор запросов кэширует планы только для тех форм запросов, которые могут иметь более одного жизнеспособного плана, и иногда пересматривает планы запросов по мере изменения содержимого коллекции.
Чтобы поэкспериментировать с планами запросов, нам нужен небольшой набор данных, и пример из части 3. Учебник по MongoDB и Java снова пригодится. Давайте переключимся на коллекцию книг в базе данных книжного магазина , создадим пару индексов и вставим в нее несколько документов, используя оболочку MongoDB .
Как только подготовка будет завершена, давайте запустим простой запрос, который запустит оценку планов запросов: db.books.find( { "publisher.name": "O'Reilly" }, { "title": 1 } )
команда
дб. <коллекция> .getPlanCache (). помощь ()
Описание
Команда отображает методы, доступные для кэша плана запросов коллекции, с кратким описанием.
пример
В оболочке MongoDB давайте db.books.getPlanCache().help() команду: db.books.getPlanCache().help()
Команда выводит список фильтров индекса, связанных с формами запроса для коллекции коллекции .
пример
В оболочке MongoDB давайте planCacheSetFilter команду (чтобы planCacheSetFilter список фильтров, установленных ранее planCacheSetFilter ): db.runCommand( { planCacheListFilters: "books" } )
Команда очищает кэшированные планы запросов для указанной формы запроса для сбора коллекции . Если форма запроса опущена, все кэшированные планы запросов будут очищены.
пример
В оболочке MongoDB давайте выполним команду: db.books.getPlanCache (). Clear ()
Если для уровня журнала установлено значение 1 или выше, MongoDB будет регистрировать изменения в кэше плана. Уровень журнала можно установить с помощью следующей команды (обратите внимание, что он должен быть запущен в контексте базы данных администратора): db.adminCommand( { setParameter: 1, logLevel: 1 } )
6. Курсоры
Курсоры — это основной способ доступа к документам, возвращаемым операциями чтения, например, db.<collection>.find() . В оболочке MongoDB , если возвращенный курсор не назначен переменной, то только первые 20 документов берутся из курсора и отображаются как результат. Тем не менее, курсоры очень мощные и предоставляют много полезных методов.
метод
cursor.addOption (флаг)
Описание
Метод добавляет специальные флаги протокола проводного соединения, которые изменяют поведение запроса.
Метод возвращает курсор, который начинает возвращать результаты только после передачи или пропуска нескольких документов. Его следует вызывать перед извлечением любых документов из базы данных.
Этот метод гарантирует, что запрос не будет возвращать документ несколько раз, даже если промежуточные операции записи приводят к перемещению документа из-за увеличения размера документа. Он должен вызываться перед извлечением каких-либо документов из базы данных и работает только с незащищенными коллекциями.
Команда позволяет приложениям использовать несколько параллельных курсоров при чтении всех документов из коллекции. Возвращает документ, который содержит массив информации о курсоре.
Вооружившись более глубокими знаниями о курсорах, давайте рассмотрим пример различных методов курсора в действии, используя коллекцию книг из раздела Query Cache .
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[
{
"title": "MongoDB in Action, 2nd Edition",
"publisher": {
"name": "Manning"
},
"price": 26.66,
"$diskLoc": {
"file": 0,
"offset": 17072
}
},
{
"title": "MongoDB: The Definitive Guide",
"publisher": {
"name": "O'Reilly"
},
"price": 32.99,
"$diskLoc": {
"file": 0,
"offset": 16560
}
}
]
7. Массовые операции
Одной из самых крутых возможностей последней версии MongoDB2.6 является введение массового API . В двух словах, этот новый API поддерживает упорядоченные и неупорядоченные массовые операции. В упорядоченной групповойоперации выполнение каждой операции следует порядку, который был добавлен к групповой операции. Следовательно, в неупорядоченной массовойоперации порядок каждой операции не гарантируется.
команда
дб. <коллекция> .initializeOrderedBulkOp ()
Описание
Команда Инициализирует и возвращает новый упорядоченный построитель массовыхопераций для коллекции . Строитель создает упорядоченный список операций, которые должны быть выполнены массово.
пример
В оболочке MongoDB давайте выполним команду: var bulk = db.testcollection.initializeOrderedBulkOp ()
Команда инициализирует и возвращает новый неупорядоченный построитель массовыхопераций для коллекции . Построитель создает неупорядоченный список операций, которые должны быть выполнены массово.
Эти две команды являются отправной точкой для начала использования массового API. Они возвращают объект массового построения (типа Bulk ), который обеспечивает свободный API для создания массовых операций.
метод
Bulk.insert (<документ>)
Описание
Метод добавляет операцию вставки в список массовых операций.
Чтобы закончить с массовым API, давайте создадим и выполним пример массовой операции, используя оболочку MongoDB и команды инициализации. В примере мы собираемся выполнить следующие действия:
вставить 3 книги в коллекцию книг
обновить все книги , установив поле категорий
обновить категории книги (под названием «MongoDB: The Definition Guide» ) с дополнительной категорией
Как вы можете видеть, каждое действие в рамках упорядоченной массовой операции может зависеть от предыдущих действий (например, поиск / обновление зависит от вставки). Это не относится к неупорядоченным массовым операциям . Выполнение этой массовой операции в оболочке MongoDB приводит к следующему результату:
Этот раздел завершает учебник по MongoDB . Надеемся, что вы нашли эту базу данных документов NoSQL, соответствующую вашим текущим или будущим требованиям приложений, и это руководство помогло вам принять правильные решения.