Выбор БД в новом проекте

cb2a787f506791114a01bcaeb303ed4c.jpeg

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

При разработке приложения, сервиса, системы и тп возникает один из главных вопросов: как мне хранить данные (какую БД выбрать). В связи с тем, что чаще всего в получите ответ «зависит» (it depends), предлагаю рассмотреть несколько стратегий, которые будут работать почти всегда.

Выбирайте знакомую технологию

При разработке стоит исходить из того, с чем умеет (и умеет хорошо) работать ваша команда, компания, вы сами. Частенько нам хочется опробовать новую технологию. Как известно, лучшее место и время для этого — новый проект. Поэтому напишите pet-проект и проверьте ее там. Если речь идет про коммерческую разработку, то знания технологии ускорит вас и поможет не нарваться на подводные камни.

Исходите из стандартов компании

В крупных компаниях часто (почти всегда) есть определенный скоуп технологий, «поддерживаемых» компанией. В небольших компания такие стандарты могут быть описаны не явно. Выглядят они как «все наши сервисы используют MySQL».
С одной стороны, это может ограничивать вас. С другой, в компании уже набрался пул «экспертов» по этой технологии. «Эксперты» могут помочь, как консультациями, так и предоставлением шаблонов для решения типовых проблем. Очень часто мы не решаете какую-то принципиально новую проблему, а просто адаптируете ее под предметную область.

Всегда ли это работает?

Я считаю, что да. На начальной стадии дизайна надо исходить из текущих условий. Иначе это будет выглядеть как: у нас все Java разработчики, но новый сервис мы будем писать на Erlang.

Но я в облаке!

А будет ли это работать, если использовать AWS, Azure, GCP и тп с модными DBaaS? Да, будет. DBaaS решает проблемы развертывания БД и в какой-то степени решает проблему поддержки. Но проблемы работы с конкретной технологий остаются. К тому же, DBaaS обычно более ограничен в плане гибкости конфигураций.

Но мне точно не подойдет стандартное решение!

Такое и правда может быть. Но лучший вариант, это проверить вашу гипотезу. Реализация двух Proof of Concept со стандартной БД и с узкоспециализированной под ваши задачи. Во-первых, необходимо понять, насколько ваше решение лучше стандартного. Во-вторых, цифры помогут вам аргументировать вашу позицию. И не стоит забывать, что в этом случае необходимо решать вопросы эксплуатации и поддержки новой БД.

Вывод

  • Исходите из экспертизы

  • Исходите из общих практик (команды/компании)

  • Стандартные решения не всегда работают, но это несет новые проблемы

  • Гибкость и открытость к новым подходам также важны, даже при выборе проверенных и знакомых решений

P.S.: После обсуждений этого поста телеграм канале считаю нужным оставить небольшое дополнение.

Наиболее полный алгоритм выбора такой:

  1. Понять модель данных

  2. Подсчитать объем данных

  3. Понять паттерны доступа к данным (чтения and записи)

  4. Изучить предложения

  5. Сравнить ваши потребности с возможностями Баз Данных

  6. Проверить наличие экспертизы

  7. Выбрать потенциальных кандидатов и провести сравнительный анализ

  8. Оставить простор для будущих миграций

  9. Проведите нагрузочное тестирование

  10. Закрепите выбор

Однако, я бы прибегал к нему только в случае, если стандартное решение для вас точно работать не будет. А стратегией «по умолчанию» стоит использовать подход, описанный в данной статье.

© Habrahabr.ru