Рубрики
Без рубрики

Выполнение вычислений в базе данных против приложение

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

Автор оригинала: Anshul Bansal.

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. База данных против Приложение

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

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

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

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

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

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

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