
Руководство по обновлению MongoDB 8.0: что вам нужно знать, прежде чем обновить
11 июня 2025 г.Задумывались ли вы, почему обновления и обновления так важны для любой системы? Ну, это не секрет: они гарантируют, что системы остаются актуальными и эффективными. С MongoDB это ничем не отличается. Всякий раз, когда мы думаем об обновлении, мы ищем эффективность, безопасность, производительность и другие преимущества, которые поставляются с обновленными системами. Однако каждое обновление вводит изменения, которые необходимо тщательно управлять. В этой статье мы рассмотрим некоторые новые функции MongoDB версии 8.0 и выделите ключевые соображения, которые вы должны учитывать, прежде чем обновить эту новую версию.
Что нового в версии 8.0?
Самая популярная база данных документов сейчас быстрее, чем когда -либо.Mongodb 8.0Это отличный выбор для тех, кто ищет производительность, передовые технологии и интуитивно понятный опыт. Он предлагает заметное улучшение пропускной способности и задержки по сравнению с более ранними версиями. Внутреннее тестирование против 7,0 демонстрирует на 32% более быстрые чтения, на 59% более быстрые обновления и 200%+ более быстрые запросы временных рядов. Выпуск этой последней версии фокусируется на нескольких ключевых столбах:
Улучшение производительности: MongoDB 8.0 предлагает значительные улучшения производительности, такие как более быстрое чтение, записи и объемные операции. Вы знаете оinsertMany
иbulkInsert
? Ну, они были оптимизированы! Таким образом, если ваше приложение испытывает высокие нагрузки, обновление до 8.0 может резко сократить время отклика и повысить пропускную способность, гарантируя, что ваша система остается масштабируемой даже при тяжелом использовании.
Безопасность: В Mongodb 8.0,Запросимое шифрованиеПредставляет возможность выполнять запросы диапазона на зашифрованных полях с использованием операторов $ lt, $ lte, $ gt и $ gte.
Устойчивость, масштабируемость и высокая доступность: С MongoDB 8.0 горизонтальное масштабирование теперь быстрее и доступнее. Этот метод позволяет приложениям выходить за рамки традиционных баз данных путем распространения данных по нескольким серверам, известным как осколки, без необходимости заранее подготовить большие объемы ресурсов. Новые функции Sharding в MongoDB 8.0 делают распределение данных в 50 раз быстрее при сокращении затрат до 50%.
Общие изменения
Запросимое шифрование
С новой версией, запрос, заинтересованность позволяет искать в диапазоне, используя такие операторы, как$lt
В$lte
Вgt
, и$gte
, например, для фильтрации данных с помощью определенных интервалов, таких как даты или численные значения, сохраняя при этом зашифрованные данные.
Экспресс -этапы запросов
Express был представлен как новый этап выполнения, который оптимизирует путь запроса для простых вариантов использования. Если вы запускаете простой запрос, который использует один индекс _id, например ...
db.customer.find({_id: ObjectId('670ec6b005b98857588f5b6a')}).explain()
… Вы увидите, что эта новая стадия Express_ixscan была включена.
Экспресс -этапы могут быть одним из следующих действий:
- Express_clustered_ixscan
- Express_delete
- Express_ixscan
- Express_update
Вместо того, чтобы выполнять этап классического плана, ваш запрос теперь будет использовать этот новый этап. Это пропускает регулярное планирование и выполнение регулярного запроса, обеспечивая до 17% улучшения производительности.
Форма запроса и настройки запроса
Форма запроса в MongoDB представляет собой набор атрибутов, которые группируют аналогичные запросы вместе, включая фильтры, сортировку, прогнозы, этапы агрегации и пространство имен. Это позволяет MongoDB повысить производительность путем повторного использования планов запросов для структурно сходных запросов, что приводит к более эффективному выполнению. Начиная с MongoDB 8.0, форма запроса поддерживает настройки запроса, что позволяет вам определить конкретное поведение для соответствия запросов.
Одним из таких поведений являетсяreject: true
параметр. При применении MongoDB автоматически отклоняет любой запрос, соответствующий этой форме, независимо от ее конкретных значений.
В случае использования:Представьте, что вы управляете базой данных, получающей запросы из сторонних приложений. Одно из приложений начинает отправлять тяжелые запросы, которые выполняют сканирование сбора (CollScan), значительно замедляя систему - например, запрос, подобный:
db.pizzaOrders.find({price: 10})
// Explain Plan
"winningPlan": {
"stage": "COLLSCAN",
"filter": {
"price": {
"$eq": 20
}
},
},
Мы можем установить запросы для отклонения запросов, которые соответствуют этой структуре (независимо от значений):
db.adminCommand( {
setQuerySettings: {
find: "pizzaOrders",
filter: {
price: 20
},
$db: "my_database"
},
settings: {
comment: "Will be rejected",
reject: true
}
} )
Эта команда устанавливает форму запроса, где любой запрос ищетprice
вpizzaOrders
Сбор будет отклонен, независимо от фактическогоprice
ценность, предоставленная в запросе. (Основное внимание уделяется структуре запроса.) Поэтому, если мы выполняем запрос, который соответствует этой структуре…
db.pizzaOrders.find({price: 10})
… Запрос будет автоматически отклонен MongoDB:
Чтобы увидеть все настройки запроса, вы можете использовать стадию $ QuerySettings в конвейере агрегации:
db.aggregate( [
{ $querySettings: {} }
] )
Результат:
[
{
"queryShapeHash": "4DD2DED8A25C787DFA41325883052FABB97DDEE567B2636A3B188DDF0CCFE6F0",
"settings": {
"reject": true,
"comment": "Will be rejected"
},
"representativeQuery": {
"find": "pizzaOrders",
"filter": {
"price": 20
},
"$db": "my_database"
}
}
]
Однако, если вы хотите осмотреть формы запросов - то есть различные типы запросов, которые были выполнены - у вас есть два варианта:
- Использовать
$queryStats
Полем
Эта стадия агрегации предоставляет статистику по запросам.С момента перезапуска последнего сервераПолем
use('admin');
db.aggregate( [
{ $queryStats: {} }
] )
Это помогает анализировать шаблоны запросов и оптимизировать производительность.
2. Проверьте журналы MongoDB.
- Медленные запросы регистрируются с ихQueryshapehashesВ журналах MongoDB.
- Это полезно для выявления неэффективных запросов, которые требуют оптимизации.
Чтобы удалить, мы можем использовать хэш в форме запроса:
db.adminCommand(
{
removeQuerySettings: '4DD2DED8A25C787DFA41325883052FABB97DDEE567B2636A3B188DDF0CCFE6F0'
}
)
Этот подход является ценным, поскольку он гарантирует, что база данных не повлияет на сторонние запросы, которые могут вызвать высокое потребление ресурсов, всеБез необходимости вносить изменения в приложениеПолем
Совместимость и снижение
Поведение запроса
Перед версией 8.0, если вы искали значения, равныеnull
, поля со значениемundefined
также будет возвращен. Однако в этой новой версии данные хранятся какundefined
больше не будет возвращен в запросы сnull
Равенство - например:
// People collection
[
{ _id: 1, name: null },
{ _id: 2, name: undefined }
]
Учитывая эту коллекцию, если вы запустите следующий запрос…
db.people.find({name: null})
… Результат:
[
{ _id: 1, name: null }
]
Данные сundefined
больше не будет возвращено. Если ваше приложение содержит данные сundefined
, вы можете переписать или обновить неопределенные данные и запросы для учета этого изменения поведения.
Примечание:undefined
тип устарел, а в некоторых случаях, если вы пытаетесь вставитьundefined
, он будет преобразован вnull
Полем
Индексные фильтры
Подумайте об использованииsetQuerySettings
, как обсуждалось в разделе «Форма запросов» в этой статье, поскольку в этой версии устарели индексные фильтры.setQuerySettings
предлагает значительно больше функциональности, что делает его предпочтительным выбором. С индексными фильтрами теперь устаревшим, желательно переключиться наsetQuerySettings
Чтобы воспользоваться его передовыми функциями.
Обновление планирования и стратегии
Теперь, когда вы увидели новые функции в последней версии и решили перейти на новейший релиз MongoDB, есть несколько вещей, о которых вам нужно знать. Эта тема описывает некоторые стратегии и шаги, которые идеально подходят для обеспечения плавного и успешного обновления реплики, набора в Mongodb Atlas.
Имейте в виду, что каждый сценарий имеет свои особенности, и понимание того, как ваше приложение использует функции MongoDB, имеет решающее значение для эффективного обновления. Проанализируйте, какие функции широко используются и как на них может повлиять обновление.
Оценка до обновления
Обновить путь версии
ВсеНабор репликиУчастники должны запускать версию 7.0 перед обновлением до версии 8.0.
Важно отметить, что невозможно обновить непосредственно с серии версии 5.0 до 8.0, например, ни с 6,0-серии до 8.0. Для этого вы должны последовательно обновить, версию по версии, пока не достигнете версии 7.0.
Обзорные примечания
Ни одно другое место не будет содержать более ценную информацию, чем
Проверьте совместимость драйвера
Прежде чем обновить что -либо, связанное с MongoDB, важно проверить таблицы совместимости в документации для вашего водителя. КизбегатьРазрушение вашего приложенияВы должны убедиться, что версия MongoDB совместима с драйвером MongoDB, который вы планируете использовать. Взгляните на это изображение:
Мы видим, что для использования всех функций MongoDB 8.0 вам необходимо использовать версию драйвера 5.2 до 5.3. Драйверы приложений, возможно, потребуются обновлять, чтобы в полной мере воспользоваться новыми функциями сервера. В некоторых случаях устаревшие драйверы могут быть полностью несовместимы с более новыми версиями MongoDB.
Cluster Health Check
Еще один важный момент перед началом обновления - это проверить здоровье всех членов вашего набора копий. ** Убедитесь, что все узлы работают оптимально. ** Вы можете найти эту информацию, обратившись к меню «Кластер базы данных» и нажав на свой кластер:
На этом экране вы заметите, что у каждого узла есть зеленая точка рядом с его названием, указывая на то, что здоровье в порядке.
Постановка кластера: ваш тестовый центр
Чтобы обеспечить безопасное обновление и снизить риски, важно работать сТестирование средыПолем Постановка действует как безопасная зона для тестирования новых версий, функций и изменений, не влияя на конечных пользователей. С кластером производства в здоровом состоянии пришло время следовать этим шагам:
- Создать кластер
Этот шаг включает в себя создание выделенного кластера для целей тестирования. Следуйте стандартному процессу, чтобы настроить новый кластер,Обеспечение того, чтобы соответствовать текущей производственной версииЧтобы точно моделировать производственную среду.
2. Обновить постановку с производственными данными
Восстановите недавнюю резервную копию из производственного кластера, чтобы обеспечить зеркающую среду, которая отражает текущее состояние производства. Вы можете сделать это через интерфейс Atlas, выбрав резервную копию, выбрав опцию восстановления и нацеливаясь на кластер.
3. Обновление кластера стадию до 8.0
Обновите кластер Patding to MongoDB 8.0, чтобы проверить новую версию и его функции. Для этого просто нажмите на кластер и выберите «Редактировать конфигурацию» и «Дополнительные настройки»:
4. Проверьте свое приложение
Запустите тесты, чтобы убедиться, что все работает как ожидалось, включая тесты базы данных и приложений.
Обновление производственного кластера
После тестирования в стационарной среде убедитесь, что версия совместимости функции (FCV) установлена надлежащим образом, перед обновлением производственного кластера.
FCVПредоставляет дополнительный уровень безопасности во время процесса обновления, контролируя, какие функции новой версии MongoDB включены в кластере. Это позволяет вам постепенно переходить к последней версии, следя за тем, чтобы все работает правильно, прежде чем полностью включить новые функции в производстве.
Хотя это не обязательно, настройка FCV дает вам гибкость. При необходимости вы можете вернуться к предыдущей версии, настраив настройку FCV. Это гарантирует, что вы можете управлять процессом обновления с минимальным риском и иметь больший контроль над любыми потенциальными проблемами.
После того, как вы настроили FCV (при желании), вы можете продолжить обновление производственного кластера. Для этого просто выполните те же шаги, изложенные в предыдущем разделе, но на этот раз примените их к производственному кластеру.
Мониторинг
Пост-обновление так же важно, как и все предыдущие шаги. Мониторинг операции имеет решающее значение для обеспечения успеха процесса.
Некоторые важные моменты для проверки:
Здоровье узла: Следите за здоровьем узлов, чтобы убедиться, что они функционируют правильно.
Задержка операций: Следите зазадержкао операциях чтения и записи, чтобы убедиться, что нет проблем с производительностью.
Производительность запроса: Контролироватьпроизводительность запросовЧтобы убедиться, что они работают эффективно после обновления.
Индексы: Проверьте, что индексы функционируют должным образом и оптимизируют их при необходимости.
И последнее, но не менее важное, проверьте метрики для каждого узла в вашем кластере. Они дадут ценную информацию об общем здоровье вашей системы. Вы можете найти их на вкладке «Метрики» своего кластера:
Рекаптировать
Ваш план обновления должен быть настроен, чтобы соответствовать конкретным потребностям и целям вашей организации. Обязательно следите за жизненным циклом поддержки вашего кластера MongoDB и оставайтесь в курсе выпусков версий, чтобы вы могли подготовиться к бесшовному и эффективному обновлению.
- Поймите, как ваше приложение взаимодействует с функциями MongoDB.
- Признайте любые необходимые изменения в вашем приложении.
- Запланируйте свое обновление заранее.
- Не упускайте из виду обновления драйверов.
- Проведите тщательное тестирование, прежде чем продолжить обновление.
Насколько сложно ваше обновление?
Теперь, когда мы обрисовали ключевые шаги для успешного обновления, включая оценку до обновления, проведенное тестирование кластеров и проверку совместимости драйверов,-давайте оценим, насколько сложным может быть ваше обновление. Усилия, необходимые для обновления до MongoDB 8.0, зависит от нескольких факторов, включая вашу текущую версию, совместимость драйверов, размер данных и уровень опыта.
Прямые обновления
Если вы уже находитесь на MongoDB 7.0, имеете обновления драйверов и работаете на полностью поддерживаемом уровне Atlas, то обновление, как правило, является быстрее и простым. В этих случаях настройка кластера постановки, проверка здоровья и выполнение обновления может быть выполнено эффективно, часто с минимальным или отсутствием простоя.
Более сложные обновления
Если вы находитесь на более старой версии (например, 5,0 или 6,0), вам нужно будет обновлять постепенно (например, 5,0 → 6,0 → 7,0 → 8,0), как упоминалось ранее. Кроме того, если ваши драйверы устарели или у вас есть пользовательские конфигурации, процесс может занять несколько часов и потребовать более тщательного тестирования для предотвращения проблем совместимости.
Поскольку время обновления значительно варьируется в зависимости от этих факторов, используя кластер в качестве эталона (обсуждается в предыдущем разделе)может помочь оценить продолжительность.Хотя этот подход не даст точного времени, он может дать вам приблизительное представление об общей продолжительности обновления, что позволит вам планировать соответствующим образом.
Независимо от сложности, следуя передовым методам, таким как тестирование стативной среды и мониторинг кластера здоровья, обеспечивает плавный и надежный переход. Усилия того стоит, так как обновление разблокирует лучшую производительность, улучшения безопасности и новые функции.
Заключение
В этой статье выделились ключевые изменения в последней версии, включая соображения совместимости, устаревшие функции и лучшие практики для плавного обновления. Понимая эти аспекты, вы можете обеспечить плавный переход на MongoDB 8.0 и продолжать пользоваться его расширенными возможностями.
Эта статья была написана
Оригинал