Вскоре я планирую переписать свое приложение на Java (с VB.NET), и, поскольку у меня появился такой шанс, я планирую сделать большую очистку кода в новом приложении, так как тот, который написан на VB.NET, является моим первым приложением и это оказалось довольно большим для одного человека.
Во всяком случае, я думал об использовании циклов в хранимых процедурах MySQL (которые я ненавижу, я не могу сказать почему), и, если возможно, лучше запросить базу данных для данных, мне нужно выполнить цикл, а затем использовать клиентский ПК для выполнения все эти операции, а затем отправить данные обратно в базу данных.
Пример работы: в моих приложениях поступают товары. Когда я продаю товары, мне нужно подключить продажи с ранее купленными товарами с помощью правила First in First out. Например, я купил 10 бананов, затем еще 10, а затем 20. Затем я хочу продать 30 из них, поэтому я связываю первые 10 бананов, и он оставляет меня с 20, поэтому я связываю его с другими 10, поэтому он оставляет меня с 10, а затем я свяжите его с последней партией бананов, но я не использую их всех, поэтому у меня осталось 20 бананов.
Как я вижу это:
Циклы в хранимых процедурах должны быть быстрее, потому что они получили все данные в одном месте, но я не уверен, что это хорошая практика для выполнения таких операций в базе данных.
Циклы в приложении должны получать данные из базы данных, а затем отправлять их обратно, что может сделать это плохо, но лично я считаю, что циклы на других языках, чем SQL, легче читать и отлаживать.
Как вы думаете?
Пытаясь ответить объективно, я бы сказал: это зависит от сложности вашего запроса, количества данных, которые необходимо обработать, и от используемой СУБД.
Я также хотел бы добавить, что только потому, что данные обрабатываются в базе данных, это не должно быть быстрее, чем ваше приложение. Основное качество баз данных лежит в операциях на основе набора SQL, как уже писал Гордон Линофф.
Если вы не анализируете несколько сотен тысяч наборов данных, возможно, вам не нужно много беспокоиться о производительности, но больше о том, что является наиболее удобным для пользователя способом.
По моему опыту, сочетание простых выборок, предоставляющих фильтрованные данные и интеллектуальные циклы, обрабатывающие их внутри моего приложения, всегда делало хороший Иов, поскольку он был ремонтоприемным и достаточно быстрым.
В вашем примере это означает: используйте SQL, чтобы получить ваш запас, отфильтрованный для бананов, и отсортировать их по дате (очевидно). Затем проведите свои результаты в приложении и остановитесь, как только вы получите нужное количество бананов
Используя оконную функцию Sum-Function, вы можете даже ограничить результаты запроса точкой, что кумулятивная сумма количества передает определенное значение.
SELECT
.