Повна версія
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 сервера.