Рассказ о SQL-разработчике, который нащупал и влюбился в MongoDB.

Введение

Это моя история о том, как я нащупал и влюбился в MongoDB, как хранилище данных для продукта, которое мы создаем в Introvoke, чтобы обеспечить масштабные брендированные виртуальные и гибридные мероприятия для организаторов, OEM-производителей. и предприятия.

Большую часть своей профессиональной жизни при разработке приложений с использованием различных технологических стеков я в основном использовал РСУБД в качестве хранилища данных. Часто это был Microsoft SQL Server, поскольку я был в первую очередь разработчиком .NET / C #, работающим в Microsoft. Я имел удовольствие работать с MySQL, PostgreSQL, IBM DB2 и, да, еще с Oracle, работая для стартапов, поставщиков программного обеспечения, учебных заведений и крупных предприятий. Хорошие и надежные продукты с учетом решений, которые они обеспечивают, и предлагаемой цены.

Пока я не присоединился к своей новой должности в Introvoke в конце апреля 2021 года, я в основном знакомился с технологией NoSQL через Azure Cosmos DB. Чтобы привлечь внимание таких корпоративных разработчиков, как я, Cosmos DB предлагает язык запросов, подобный SQL, и это то, что я использовал по умолчанию, когда использовал Cosmos DB.

Выбор в пользу использования MongoDB и в качестве хоста с использованием MongoDB Atlas был сделан еще до моего прихода в Introvoke.

Моя основная ответственность в Introvoke заключается в создании и управлении аналитикой, интеграцией и API для платформы.

Первой задачей, которую меня втянули, было заставить вычисления потребления на нашей платформе работать лучше и точнее, поэтому мне пришлось сразу же погрузиться в изучение MongoDB. (Ааа… Я слышал о технологической интенсивности как о модном слове отрасли от Сатья Наделлы, когда я работал в Microsoft, а теперь я это чувствовал).

Путь обучения

Я пошел по этому пути. Как и все остальное в жизни, всегда есть больше способов, чем один, и они зависят от стиля обучения.

Курсы Pluralsight

Причина, по которой я прыгнул сюда, была прежде всего - ПРИВЫЧКА. Мне, как инженеру Microsoft, это был один из многих доступных мне учебных ресурсов, и с годами он стал хорошей отправной точкой.

На моем пути мне помогли следующие курсы:

Есть множество других курсов по Node.js и MongoDB на Pluralsight, которые можно изучить, но я сразу обнаружил, что они имеют отношение к тому, к чему я стремлюсь, и содержание курса было актуальным.

Университет MongoDB

Что может быть лучше для изучения MongoDB, как не у людей, которые это сделали? Здесь на помощь приходит Университет MongoDB.

Легкие в освоении курсы и четко определенный путь обучения, а главное - бесплатно! Я считаю, что конечной целью курсов будет получение сертификата MongoDB. Я начал получать ссылки на это по электронной почте после регистрации бесплатной учетной записи MongoDB Atlas.

Документация MongoDB

Вы не поверите, но документация MongoDB очень хороша. Он очень богат примерами. В большинстве случаев я мог легко следовать документации и применять примеры в своих запросах.

Быстрый старт - статья о MongoDB и Node.js и серия статей на YouTube

Я наткнулся на эту статью из четырех частей и серию YouTube об использовании Node.js и MongoDB, написанную адвокатом разработчиков MongoDB Лорен Шефер, когда искал способ реагировать на изменения в данных. в коллекции MongoDB. Это будет поток изменений в MongoDB, аналогичный поток изменений в Azure Cosmos DB или Сбор данных изменений в SQL Server. .

Мне понравился стиль выступления Лорен, ее глубокие технические знания и то, как красиво она объясняет сложные темы с легкостью и множеством примеров. Видео, с которого я начал, было последним в серии, но оно мне так понравилось, что я вернулся, прочитал три предыдущие статьи и посмотрел всю серию видео.

Конечно, переполнение стека

Это, наверное, и ежу понятно, но все же стоит упомянуть. MongoDB пользуется поддержкой богатого сообщества разработчиков. Если есть что-то, о чем вы думаете, скорее всего, кто-то спросил или решил это за вас в Stack Overflow. Единственное предостережение: иногда решения относятся к более старым версиям MongoDB, но я заметил, что сообщество очень хорошо умеет делать это различие при ответах на запросы, особенно между MongoDB 3.x и 4.x.

Мои основные психические блокаторы

Как и в случае с изучением новых технологий, мне пришлось отказаться от некоторых старых привычек. Среди них было то, как думать о хранении данных иначе, чем в мире SQL JOINS.

В Introvoke я унаследовал очень ненормализованное хранилище данных с различными коллекциями. Но там, где были пробелы, я пытался создать JOINS, что не всегда было легко реализовать с точки зрения синтаксиса для новичка. За последние два месяца мне постепенно стало лучше.

Тот же самый мыслительный процесс также повлиял на меня в отношении того, как хранить данные в нормализованном порядке, уделяя особое внимание хранению идентификаторов, а не встраиванию документов.

Одной из статей, которая помогла мне лучше разрабатывать и больше думать о том, как получить доступ к данным, а не пытаться хранить данные в сжатой форме, была эта статья - Лучшие практики проектирования схемы MongoDB от Джо Карлссона .

Я думаю, что это кривая обучения, с которой столкнется большинство разработчиков из мира РСУБД. Как я обнаружил, получение оптимального решения требует некоторых экспериментов.

Мои любимые функции

Язык запросов MongoDB

Язык запросов MongoDB (MQL) очень мощный и в большинстве случаев интуитивно понятный, хотя временами может быть многословным.

Агрегаты

Структура агрегации, на мой взгляд, является самой мощной функцией MongoDB, и я использую ее почти для всех функций, которые я создаю для возврата данных. Это может помочь вам сформировать данные в соответствии с тем, как ваши API должны возвращать их в качестве контракта данных. Почти нулевая ORM. Представьте, что вы делаете это в мире SQL.

Единственное место, где я не смог использовать конвейер агрегации, - это данные, которые хранились в разных кластерах MongoDB. Именно здесь приложение Node.js должно сшивать результаты разных запросов вместе, что, к моему удивлению, происходит очень быстро. Это, наверное, обсуждение другой статьи.

Грани

Я обнаружил эту особенность фреймворка агрегации - грань, две недели написания запросов и привязки их к API. Я нашел это особенно полезным в тех местах, где я начинал с одних и тех же отфильтрованных данных, но мне приходилось выполнять для них несколько различных расчетов группировки (измерения для людей, занимающихся хранилищами данных). До этого я писал для него несколько запросов и вызывал его из приложения.

Мой питомец мозоль

ПУСТОЙ результат

В мире SQL для запросов с неправильными именами таблиц или столбцов принудительное применение схемы вызовет немедленную обратную связь. Но не в MongoDB, он возвращает пустой результат, который временами может стать проблемой.

Были случаи, когда я неправильно написал коллекцию или имя поля. Например, в некоторых коллекциях уникальный идентификатор сущности «Компания» называется «company«, а в других - «companyId».

Другой вариант - неправильное написание коллекции с именем `EventsAggregates` как `EventAggregates` или `EventsAggregate`.

Я бы хотел, чтобы хотя бы имя коллекции было некоторая проверка, которая могла бы предупредить разработчика об ошибке. В случае со структурой документа разработчик (или группа разработчиков) несет ответственность за создание шаблонов именования столбцов в коллекциях.

Мой инструментарий разработчика

Я нашел следующие инструменты, необходимые на моем пути к разработке, изучая, как использовать MongoDB, и создавать запросы для моего повседневного приложения.

Компас MongoDB

MongoDB Compass - это бесплатный кроссплатформенный инструмент от MongoDB. Он отлично подходит для исследования данных и выполнения запросов во встроенной в Mongo Shell. Я обнаружил, что отчеты об ошибках при разработке запросов намного полезнее, чем в расширении MongoDB - это VS-код. Однако для написания кода MQL я бы посоветовал использовать редактор, такой как Visual Studio Code или Sublime.

Расширение MongoDB для кода Visual Studio

Если вы разрабатываете с использованием Node.js или Typescript, скорее всего, вы используете код Visual Studio. Существует отличное Расширение VS Code для MongoDB, которое обеспечивает управление подключением, просмотр коллекций MongoDB с кодом VS, подсветку синтаксиса для кода MQL. Единственное ограничение, которое я обнаружил с плагином, это то, что я не смог вернуть его более 20 документов на запрос. При просмотре коллекций документов есть параметр, но, похоже, он не применяется к настраиваемым запросам.

Путешествие продолжается

На момент написания этой статьи в июне 2021 года на изучение этой фантастической технологии ушло всего два месяца. Я уверен, что в ближайшие дни мне еще будет что сказать.

использованная литература

ОТКАЗ

Мнения, выраженные в этой статье, являются исключительно моими и НЕ отражают точку зрения моего работодателя.