Планируя, как вы собираетесь организовать свои данные, вы можете повысить производительность, уменьшить количество ошибок и упростить анализ для всех, пишет на портале The New Stack Чарльз Малер, технический писатель компании InfluxData.

Если в небольших проектах часто можно обойтись без особого планирования, то при создании сложного ПО планирование становится необходимым условием успеха. И, вероятно, самое важное, что вам следует сделать правильно, — это модель данных для вашего приложения.

В книге-бестселлере Мартина Клеппмана «Проектирование приложений, интенсивно использующих данные» («Designing Data-Intensive Applications») дается убедительное обоснование того, почему модели данных так важны: «Модели данных оказывают такое глубокое влияние не только на то, как написано ПО, но и на то, как мы думаем о проблеме, которую решаем».

Эта цитата затрагивает корень того, почему мы вообще создаем ПО — чтобы решать проблемы. А для этого необходимо общение между инженерами и людьми из бизнеса, которые знают пользователей и решаемые проблемы. Благодаря этому инженеры-программисты могут получить необходимые знания и преобразовать их в модель данных для ПО, которое поможет решить проблему.

Почему моделирование данных так важно?

Надлежащее моделирование данных требует времени, поэтому возникает вопрос: почему оно важно и стоит всех усилий? Давайте рассмотрим некоторые прямые и косвенные преимущества моделирования данных.

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

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

Лучшие практики моделирования данных

1. Помните о бизнес-целях

Самое важное при моделировании данных — помнить о том, как это связано с бизнесом в целом. Будучи инженером-программистом, легко забыть об общей картине, поэтому сотрудничайте с бизнес-аналитиками и другими заинтересованными сторонами, чтобы убедиться, что модель данных отражает реальность.

2. Правильно документируйте свою модель данных

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

3. Проектируйте модель данных так, чтобы ее можно было модифицировать с течением времени

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

4. Применяйте различные уровни абстракции для разных людей

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

  • Концептуальное. Объекты определяются в соответствии с бизнесом и тем, как они взаимодействуют, или любыми релевантными ограничениями и бизнес-правилами.
  • Логическое. К объектам, которые были определены на концептуальном этапе моделирования данных, добавляется больше деталей. Логические модели данных обычно включают в себя то, какие конкретные типы данных и атрибуты должен иметь каждый объект.
  • Физическое. Физическая модель определяет фактические технические детали для хранения данных, включая детали реализации конкретной базы данных. Если использовать в качестве примера реляционную базу данных, то физическая модель будет включать SQL для создания таблиц и определения типов данных для каждого столбца в таблицах, представляющих объекты, которые определены на этапе концептуального проектирования.

5. Выберите правильную технику моделирования данных

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

Например: создаете ли вы модель данных для приложения конечного пользователя или для аналитиков данных, которые будут выполнять в основном аналитические запросы? В первой ситуации вы, возможно, захотите использовать реляционное моделирование данных, что является обычным выбором. Во втором случае, возможно, имеет смысл использовать размерное моделирование.

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

6. Подумайте об администрировании данных и безопасности

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

7. Избегайте преждевременной оптимизации

Хотя этот совет может показаться противоречащим многому из того, что было написано выше, идея заключается в том, чтобы не перемудрить и не замедлить процесс разработки. Важно правильно принять несколько основных решений, а затем проводить итерации. Еще одна вещь, о которой следует помнить, — это не переборщить со сложностью системы. Делайте все как можно проще, а о масштабировании системы беспокойтесь, когда это станет проблемой.

Практический пример

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

Сначала давайте определим сущности (субъекты) и отношения на концептуальном уровне. Сущности будут следующими:

  • дом;
  • комната;
  • датчик;
  • температура;
  • потребление энергии.

Основные отношения между этими сущностями могут быть следующими:

  • дом содержит несколько комнат;
  • в каждой комнате размещены один или несколько датчиков;
  • датчик генерирует несколько показаний температуры;
  • потребление энергии связано с домом в целом.

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

При работе с данными временного ряда вы, вероятно, захотите разделить сущности на статические, которые не меняются (название комнаты), и изменяющиеся во времени (температура). Затем вам нужно подумать о том, как смоделировать различные типы отношений, которые могут возникнуть в результате этого:

  • отношения между двумя статическими сущностями (комната и дом);
  • отношения между изменяющимися во времени и статическими сущностями (температура и комната);
  • отношения между двумя изменяющимися во времени сущностями (температура и потребление энергии).

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

Следующие шаги

Моделирование данных — это ценный инструмент, позволяющий получить максимальную ценность от ваших данных. Следование лучшим практикам, описанным в этой статье, должно поставить вас на правильный путь для начала работы с моделированием данных в ваших собственных проектах.

Одним из наиболее ценных аспектов моделирования данных является понимание того, как будет осуществляться доступ к вашим данным. Благодаря этому вы сможете сделать правильный выбор физической модели с точки зрения того, какую базу данных имеет смысл использовать для хранения данных, чтобы оптимизировать затраты и производительность. Например, если вы работаете с данными временных рядов, такими как метрики приложений, данные датчиков IoT или аналитика в реальном времени, возможно, имеет смысл использовать специализированную базу данных временных рядов. Если вы работаете с высокосвязанными данными, идеальным вариантом будет графовая база данных. В ситуациях, когда вам нужны гарантии целостности данных, хорошим выбором будет реляционная база данных с поддержкой транзакций ACID.

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