Перейти к основному содержимому

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

· 4 мин. чтения

Задача: Наибольшая подстрока палиндром

Для заданной строки s, верните наибольшую подстроку палиндром входящую в s. Подстрока — это непрерывная непустая последовательность символов внутри строки. Стока является палиндромом, если она читается одинаково в обоих направлениях...

ANDROMEDA 42

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

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

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

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

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

5. Вывод

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

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