Файлы или СУБД
Задача: в каких случаях использовать СУБД, а в каких файлы для работы с данными.
Краткое сравнение
Золотым стандартом хранения данных в архитектуре современных программ является хранение в базе данных. Не сильно ошибусь, если скажу, что в произвольном проекте сложнее Hello World на этапе проектирования будет заложена СУБД.
В большинстве случаев это оправданное решение, которое отработано во многих проектах, имеет понятные способы масштабирования, управления и скорее всего не испортит проект.
Преимущество СУБД с позиции архитектора:
- унифицированный способ хранения и обработки (стандартизация CRUD);
- быстрый поиск, агрегация и извлечение данных;
- логика обработки может быть объединена с данными;
- возможность проверить ограничения на уровне СУБД;
- стандартны API для работы с СУБД, что позволяет подключать разные приложения;
- безопасность и резервное копирование делаются по готовым шаблонам;
- большой запас прочности для роста проекта;
- унификация описания структур и связей между данными.
Недостатки:
- дополнительная сложность на этапе сопровождения;
- недостатки "черного ящика" - не всегда возможно понять причину проблем, так как разработчик СУБД, как правило, стороннее лицо;
- производительность и масштабирование требует дополнительной квалификации, не всегда делается правильно;
- привязка к вендору (вендорлок);
- усложнение за счет дополнительных абстракции ну уровне БЛ (например, ORM).
Вместо СУБД можно использовать другой способ: хранение данных в файлах. Такое решение имеет следующие преимущества:
- хранение неизменяемых данных (или в случае изменения части данных полностью перезаписывается весь набор);
- быстрый инкремент данных;
- простой способ хранения данных;
- не требует повышения уровня абстракции (нет дополнительных слоев в архитектуре, в существующей архитектуре добавляется модуль для работы с данными);
- низкое зацепление данных (каждый файл - собственный неймспейс, который не обязан быть связан с другими файлами);
- свобода в выборе структуры данных и способах их обработки;
- простой способ интеграции приложений, не требует доп. драйверов и протоколов;
- легко передавать, хранить, архивировать, шифровать данные;
- возможность использовать текстовые и бинарные форматы;
Недостатки:
- медленная вставка "в середину" данных;
- логика отделена от самих данных, каждое приложение должно реализовывать свой парсинг и обработку данных;
- ограничения на размеры файлов и их количество со стороны файловых систем;
- контроль за схемами данных и их связями лежит на приложении;
- приходится "велосипедить" для обычных CRUD задач, обычно с просадкой по скорости.
Вывод
Рассматривать файлы в качестве основного способа хранения и обработки данных смысла не имеет, лучше сразу заложить СУБД, однако файлы отлично подходят в качестве вспомогательного инструмента для решения следующих задач:
- промежуточное накопление сырых данных для последующей обработки;
- ведения различных текстовых или бинарных логов (как текстовых, так и лога изменений данных, например, может использоваться в Event Sourcing);
- ведения журналов аудита (в отличие от лога имеет дополнительные требования, исключающие подмену данных, что потребует дополнительных тех. решений);
- экспорт/импорт данных (файлы замечательно подходят для промежуточного хранения и конвертирования);
- как элемент распределенных транзакций.
Реакции влияют на темы постов:
100 x 💡 - пост по архитектуре
100 х 🥷 - пост про код
100 х 👑 - пост про профессиональный рост
#архитектура #знания
SOER | PRO | Boosty
Задача: в каких случаях использовать СУБД, а в каких файлы для работы с данными.
Краткое сравнение
Золотым стандартом хранения данных в архитектуре современных программ является хранение в базе данных. Не сильно ошибусь, если скажу, что в произвольном проекте сложнее Hello World на этапе проектирования будет заложена СУБД.
В большинстве случаев это оправданное решение, которое отработано во многих проектах, имеет понятные способы масштабирования, управления и скорее всего не испортит проект.
Преимущество СУБД с позиции архитектора:
- унифицированный способ хранения и обработки (стандартизация CRUD);
- быстрый поиск, агрегация и извлечение данных;
- логика обработки может быть объединена с данными;
- возможность проверить ограничения на уровне СУБД;
- стандартны API для работы с СУБД, что позволяет подключать разные приложения;
- безопасность и резервное копирование делаются по готовым шаблонам;
- большой запас прочности для роста проекта;
- унификация описания структур и связей между данными.
Недостатки:
- дополнительная сложность на этапе сопровождения;
- недостатки "черного ящика" - не всегда возможно понять причину проблем, так как разработчик СУБД, как правило, стороннее лицо;
- производительность и масштабирование требует дополнительной квалификации, не всегда делается правильно;
- привязка к вендору (вендорлок);
- усложнение за счет дополнительных абстракции ну уровне БЛ (например, ORM).
Вместо СУБД можно использовать другой способ: хранение данных в файлах. Такое решение имеет следующие преимущества:
- хранение неизменяемых данных (или в случае изменения части данных полностью перезаписывается весь набор);
- быстрый инкремент данных;
- простой способ хранения данных;
- не требует повышения уровня абстракции (нет дополнительных слоев в архитектуре, в существующей архитектуре добавляется модуль для работы с данными);
- низкое зацепление данных (каждый файл - собственный неймспейс, который не обязан быть связан с другими файлами);
- свобода в выборе структуры данных и способах их обработки;
- простой способ интеграции приложений, не требует доп. драйверов и протоколов;
- легко передавать, хранить, архивировать, шифровать данные;
- возможность использовать текстовые и бинарные форматы;
Недостатки:
- медленная вставка "в середину" данных;
- логика отделена от самих данных, каждое приложение должно реализовывать свой парсинг и обработку данных;
- ограничения на размеры файлов и их количество со стороны файловых систем;
- контроль за схемами данных и их связями лежит на приложении;
- приходится "велосипедить" для обычных CRUD задач, обычно с просадкой по скорости.
Вывод
Рассматривать файлы в качестве основного способа хранения и обработки данных смысла не имеет, лучше сразу заложить СУБД, однако файлы отлично подходят в качестве вспомогательного инструмента для решения следующих задач:
- промежуточное накопление сырых данных для последующей обработки;
- ведения различных текстовых или бинарных логов (как текстовых, так и лога изменений данных, например, может использоваться в Event Sourcing);
- ведения журналов аудита (в отличие от лога имеет дополнительные требования, исключающие подмену данных, что потребует дополнительных тех. решений);
- экспорт/импорт данных (файлы замечательно подходят для промежуточного хранения и конвертирования);
- как элемент распределенных транзакций.
100 x
100 х
100 х
#архитектура #знания
SOER | PRO | Boosty