Фильтровать данные в SQL или в Java? [закрытый]

каково общее руководство / правило для фильтрации данных? Я привык видеть фильтры в SQL-операторе в предложении WHERE, хотя есть случаи, когда фильтры вводят сложность SQL, что делает его массивным и трудным для чтения на первый взгляд для промежуточных разработчиков, но хорошо написанные, которые выглядят сложными, хорошо настроены и оптимальны. Фильтрация также может быть выполнена на Java, но это, конечно, имеет недостаток, где нефильтрованные данные из SQL могут быть огромными и загружать его в памяти только отфильтровать его может быть расточительно. Конечно, есть случаи, когда у вас нет выбора, кроме как фильтровать в Java, если у вас есть несколько источников данных в качестве зависимостей, которые требует фильтр.

3 ответов


фильтр на бэкэнде (sql), когда это возможно. Если это делает запрос слишком сложным для младшего разработчика, то так тому и быть. Хотя ясность кода важна, вы не должны принимать дизайнерские решения, основанные на том, насколько хорошо младший разработчик поймет его-этого достаточно, чтобы он мог его использовать.

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

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


Если данные уже находятся в БД, то имеет смысл сделать фильтрацию внутри нее, так как РСУБД будут оптимизированы для такого рода работы. Если фильтрация может сбить с толку начинающих и промежуточных разработчиков, почему бы не скрыть ее в представлении и предоставить доступ к представлению только соответствующим пользователям?


Я думаю, что нет определенных ответов на него. Это зависит от индивидуального случая использования. Как фильтрация в java, так и SQL могут быть применимы в зависимости от рассматриваемого приложения.

  • как вы упомянули, фильтрация в SQL может сделать запросы сложными и дорогостоящими. Но в то же время это можно улучшить с помощью настройки базы данных, размещения соответствующих индексов, секционирования таблиц и т. д. Это особенно тот случай, когда в дизайне базы данных все еще развивается и вы может делать такие изменения.
  • Если вы работаете над системой, база данных которой уже разработана, и у вас почти нет возможностей для значительных изменений (и, следовательно, не так много оптимизации запросов/баз данных), в этом случае фильтрация на java является лучшим вариантом.

все зависит от конкретного случая использования.