«1. Обзор

Часто бывает трудно решить, должны ли вычисления выполняться в базе данных (СУБД) или в коде приложения, чтобы одновременно получить хорошую производительность и удобство.

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

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

2. Расчет в БД

2.1. Выбор и объединение данных

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

Например, мы можем легко выбирать и отменять выбор наборов данных из нескольких таблиц, используя LEFT и RIGHT JOIN.

Точно так же агрегатные функции, такие как MIN, MAX, SUM и AVG, довольно удобны и быстрее, чем реализация Java.

Кроме того, мы можем точно настроить производительность дискового ввода-вывода, используя индексы при агрегировании данных.

2.2. Объем данных

Все популярные СУБД обеспечивают непревзойденную производительность при обработке больших объемов данных из таблиц для выполнения вычислений.

Однако нам потребуется много ресурсов, таких как память и обработка ЦП, для обработки того же объема данных в приложении, что и в базе данных.

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

3. Расчет в приложении

3.1. Сложность

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

Например, мы можем использовать асинхронное программирование, параллельное выполнение и многопоточность в Java для решения сложной задачи.

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

Например, мы можем легко добавить ведение журнала в приложение Java с помощью SLF4J и использовать популярные IDE, такие как Eclipse и IntelliJ IDEA, для отладки. Поэтому выполнение расчета в приложении — удобный вариант для разработчика по сравнению с базой данных.

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

Модульное тестирование оказывается весьма удобным для отслеживания изменений в реализациях. Итак, при выполнении вычислений в Java-приложении мы можем использовать JUnit для добавления модульных тестов.

3.2. Расширенный анализ и преобразование данных

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

Например, различные библиотеки, такие как Deeplearning4J, Weka и TensorFlow, доступны для расширенной статистики и поддержки машинного обучения.

Другим распространенным вариантом использования является то, что мы можем легко объективировать данные с помощью технологий ORM, таких как Hibernate, использовать API-интерфейсы, такие как Java Streams, для их обработки и получать результаты в различных форматах с помощью библиотек синтаксического анализа XML или JSON.

3.3. Масштабируемость

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

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

4. База данных и приложение

Теперь, когда мы увидели преимущества выполнения расчета на основе определенных факторов на каждом из уровней, давайте суммируем их различия:

    «База данных является предпочтительным выбором для выбора данных, агрегирования и обработки больших объемов. Однако выполнение вычислений в коде приложения выглядит лучшим кандидатом с учетом таких факторов, как сложность, расширенное преобразование данных, сторонние интеграции и масштабируемость. Языки -level предоставляют дополнительные преимущества, такие как ведение журнала, отладка, обработка ошибок и возможности модульного тестирования

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

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

5. Заключение

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

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