Не храните бизнес-логику в базе данных
Современные базы данных не только хранят эти самые данные, но и обрабатывают их с помощью пользовательских функций, хранимых процедур, триггеров. После знакомства с этими инструментами у разработчика возникает мысль перенести часть
Я расскажу, почему в промышленном программировании так делать не надо.
Масштабирование производительности. У приложений и базы данных различные возможности масштабирования при росте нагрузки на систему. Обычные приложения на современных фреймворках легко запустить в несколько копий на разных серверах. А вот базу данных «запустить» на нескольких серверах не так просто. Чтобы снизить нагрузку на чтение, применяют репликацию
Масштабирование разработки. Когда вы разрабатываете систему сами, вы используете любые инструменты на свое усмотрение. Когда вы нанимаете разработчиков, лучше применять стандартные общепринятые инструменты. И баги с боевой системы проще воспроизводить локально, когда
Автоматизация разработки. БД как хранилище данных — стандартная практика. Для упрощения разработки в такой парадигме есть развитые инструменты — библиотеки ORM, которые умеют, в частности, автоматически генерировать скрипты миграции структуры БД. Изменение
Версионирование. Все разработчики научились работать с системами контроля версий кода. Git — стандарт
Тестирование.
Отладка и профилирование. Для отладки и мониторинга серверных приложений существуют инструменты: логирование, отладчики, профилировщики, мониторинг. Искать баги в триггерах и хранимых процедурах вам придется вслепую.
Я помню, как на прошлой работе в CityAds в проекте была одна
Я долго не мог докопаться до настоящей причины, пока не сделал добавление записей из кода приложения, а не из триггера. Оказалось, что вставка иногда не срабатывает
Админы подтвердили, что это известная проблема в MySQL 5.6, но быстро перевести production на 5.7 они не могли. Пришлось переключить тип таблицы с InnoDB на MyISAM. Проблема исчезла.
Не храните
Радиационное загрязнение больницы в Северодвинске
На Медузе статья о том, как в больницу в Северодвинск привезли зараженных радиацией больных и даже не предупредили врачей:
В больнице имени Семашко, куда отвезли еще троих пострадавших, были детекторы и дозиметры. Врачи поняли, что идет заражение, хотя им тоже изначально было сказано, что его нет. Они их сами дезактивировали, надели защитные костюмы, респираторы, и только удостоверившись, что все безопасно, стали оказывать помощь. Так и должно быть. Так и было бы сделано у нас, если бы и нас предупредили.
На следующий день, когда больница уже была,
по-русски говоря, загаженацезием-137, военные начали проводить дезактивацию в операционных и приемном покое, выкосили всю траву вокруг, все радиоактивные предметы, которые они не могли обеззаразить, они демонтировали и увезли с собой — в том числе ванну в приемном покое, в которой мы мыли пострадавших.
Я закрываю лицо ладонями. Массирую себе глаза. И задаю немой вопрос: как такое могло произойти? Как? И у меня нет ответа. Где тот человек, который принял это решение?
И еще более невероятным кажется происшедшее, когда все посмотрели и обсудили сериал «Чернобыль».
Сначала врешь об украденных миллиардах. Потом о результатах выборов. И вот уже врешь о радиационном загрязнении: «Они не опасны для вас, работайте».