Mongo 5

Автор або джерело: Sergiy Morenets

Першоджерело

MongoDB

Повна версія

Mongo 5

Нещодавно відбулася знакова подія для всіх розробників MongoDB — вийшла 5-я версія цього чудового продукту (разом з першими оновленнями). 12 років знадобилося інженерам Mongo Inc, щоб випустити 5 ключових версій. Ми розглядаємо Mongo в нашому тренінгу «Mongo для Java розробників», зрозуміло, нам самим цікаво, що нового ми отримаємо від апгрейда, тому давайте розглянемо оглядово ті зміни, які увійшли в нову версію:

  • Time series колекції
  • Версії API
  • Live Resharding
  • Підтримка serverless в Atlas (в режимі preview)
  • Нові вимоги до архітектури CPU
  • Новая Mongo shell (mongosh)
  • Нові оператори для агрегації даних ($dateadd, $datediff та інші)
  • Нові метрики
  • Deprecated команди роботи з колекціями видалені

Time **series колекції — це Mongo колекції, які призначені для зберігання особливих документів — результатів вимірювань за часом. Ви можете зберігати ці дані і в звичайній колекції, але з огляду на величезний розмір такої колекції, з новим підходом ви як економите в дисковому просторі, так і отримуєте виграш у швидкодії при запитах. Mongo 5 пред’являє тільки одну вимогу до таких документів — там повинно бути поле, що містить дату вимірювання, а також опціонально метадані (описують вимір) і періодичність вимірювання (години, хвилини, секунди) і час життя документа.

Версії API дозволяють розробникам більш просто і безпечно переходити на нові версії Mongo сервера. Тепер під час з’єднання вашого клієнта з сервером ви можете вказати версію API (зараз підтримується тільки одна версія — «1»). І навіть якщо в майбутніх версіях Mongo з’являться зміни в його API, вказуючи стару версію API, можна не турбуватися про втрату сумісності (наприклад, в разі видалення або перейменування параметрів). Це в свою чергу спростить підтримку legacy проектів при оновленні версії Mongo. Зрозуміло, ніхто не гарантує довічну підтримку всіх версій API, підтримка найстаріших версій буде згодом припинена.

Live **Resharding дозволяє змінити sharding ключ без downtime сервера і необхідності вручну копіювати дані між старою і новою копіями колекції. У минулому неправильний вибір такого ключа міг привести до нерівномірного розподілу даних між шардами, що створювало проблеми з ефективністю і масштабування. Тепер з’явилася команда reshardCollection , яка не тільки змінює sharding ключ, а й автоматично перерозподіляє дані між шардами. При цьому в стадії commit сервер ( resharding coordinator ) може блокувати запис даних в колекцію, поки зміни остаточно не зафіксовано.

Serverless бази даних з’явилися не так давно. Головна відмінність serverless архітектури — ви платите тільки за ті операції, які здійснюються і той час, коли ваші ресурси використовуються. Крім того, ваш service provider може динамічно масштабувати кількість ваших computation units в залежності від поточного навантаження. Тому вам як DevOps не потрібно замислюватися, скільки серверів і якої потужності вибрати для вашого проекту. Serverless БД діють аналогічно. Ви платите тільки за те місце на диску, яке використовуєте і ті операції читання/запису, які здійснюються. Причому в Atlas масштабування може здійснюватися окремо для рівня обробки даних і для рівня зберігання даних.

Ще одне цікаве нововведення — Mongo 5 буде працювати тільки на процесорах архітектури сімейств Intel Sandy Bridge /AMD Buldozer /ARMv8.2 або більш пізніх. Аналогічно припинена підтримка і старих ОС:

  • RHEL/Oracle Linux/CentOS 6.2
  • Ubuntu 16
  • Debian 8
  • Windows1/Windows Server 2012 R2
  • macOs 10.13

У Mongo 5 остаточно видалені три застарілі команди для роботи з колекціями: createIndex, save і copyTo. Замість них пропонується використовувати ensureIndex, insertOne/insertMany і команди агрегації. Крім того, слід перевірити, що ваш Mongo драйвер підтримує роботу з Mongo 5. Для Java це драйвер останньої версії (4.3).

У новій shell mongosh нарешті з’явилися ті фітчи, які є у всіх сучасних редакторах: підсвічування синтаксису, авто-доповнення, контекстна допомога, більш докладні повідомлення про помилки і розширення (snippets). Відповідно, стара shell mongo оголошений deprecated і буде видалений в майбутньому. Цікаво, що поточна версія mongosh (1.0.1) не збігається з версією Mongo сервера.