1. 概要

多くの場合、データベース(RDBMS)で計算を実行するか、アプリケーションコードで計算を実行して、優れたパフォーマンスと利便性を同時に実現するかを決定するのは困難です。

この記事では、データベースとアプリケーションコードで計算を実行することの長所と短所について説明します。

この決定に影響を与える可能性のあるいくつかの要因を検討し、それらを処理するのに適したレイヤー(データベースまたはアプリケーション)について説明します。

2. データベースでの計算

2.1. データの選択と集約

リレーショナルデータベースは、データの処理、選択、および集約のために高度に最適化されています。 SQLを使用して、データを簡単にグループ化、順序付け、フィルタリング、および集約できます。

たとえば、LEFTおよびRIGHTJOIN を使用して、複数のテーブルからデータセットを簡単に選択および選択解除できます。

同様に、 MIN、MAX、SUM、AVGなどの集計関数は、Java実装よりも非常に便利で高速です。

また、データを集約しながらインデックスを活用することで、ディスクIOのパフォーマンスを微調整できます。

2.2. データ量

すべての一般的なRDBMSは、計算を実行するためにテーブルから大量のデータを処理する際に比類のないパフォーマンスを提供します。

ただし、データベースと比較して、アプリケーションで同量のデータを処理するには、メモリやCPU処理などの多くのリソースが必要になります。

また、帯域幅を節約するために、データベースでデータ中心の計算を実行して、ネットワークを介した大量のデータの転送を回避することをお勧めします

3. アプリケーションでの計算

3.1. 複雑

データベースとは異なり、 Javaのような高級言語は、複雑な計算を処理するのに十分な機能を備えています。

たとえば、Javaで非同期プログラミング並列実行、およびマルチスレッドを活用して、複雑な問題を解決できます。

同様に、データベースはロギングとデバッグの最小限のサポートを提供します。 ただし、今日の高級言語は、このような重要な機能を優れた方法でサポートしており、複雑な計算を実装する場合に便利です。

たとえば、SLF4J を使用してJavaアプリケーションにロギングを簡単に追加し、EclipseIntelliJIDEAなどの一般的なIDEをデバッグに使用できます。 したがって、アプリケーションで計算を実行することは、データベースと比較して開発者にとって便利なオプションです。

同様に、別の議論は、アプリケーションコードで計算を簡単に単体テストできるということです。これは、データベースで実行するのはかなり複雑です。

ユニットテストは、実装の変更をチェックするのに非常に便利です。 したがって、Javaアプリケーションで計算を実行する場合、JUnitを使用して単体テストを追加できます。

3.2. 高度なデータ分析と変換

データベースは、高度なデータ分析と変換の限定的なサポートを提供します。 ただし、アプリケーションコードを使用して複雑な計算を実行するのは簡単です。

たとえば、 Deeplearning4J Weka TensorFlow などのさまざまなライブラリを利用して、高度な統計と機械学習をサポートできます。

もう1つの一般的な使用例は、Hibernate などのORMテクノロジーを使用してデータを簡単にオブジェクト化し、 Java Streams などのAPIを使用してデータを処理し、を介してさまざまな形式で結果を生成できることです。 XMLまたはJSON解析ライブラリ

3.3. スケーラビリティ

RDBMSはスケールアップしかできないため、データベースのスケーラビリティを実現することは困難な作業になる可能性があります。 ただし、アプリケーションコードは、よりスケーラブルなソリューションを提供します。

ロードバランサーを使用して、アプリサーバーを簡単にスケールアウトし、多数のリクエストを処理できます。

4. データベースと 応用

各レイヤーで特定の要因に基づいて計算を実行することの利点を確認したので、それらの違いを要約してみましょう。

  • データベースは、データの選択、集約、および大量の処理に適した選択肢です。
  • ただし、複雑さ、高度なデータ変換、サードパーティの統合、スケーラビリティなどの要素を考慮する場合は、アプリケーションコードで計算を実行する方が適切な候補になります。
  • また、高級言語には、ロギング、デバッグ、エラー処理、単体テスト機能などの追加の利点があります。

複雑な問題を解決するには、両方のレイヤーの長所を組み合わせて活用することをお勧めします。

つまり、データベースを使用してデータを選択および集約し、有用なリーンデータをアプリケーションに送信し、効率的な高級言語を使用して複雑な操作を実行します。

5. 結論

この記事では、アプリケーションとデータベースで計算を実行することの長所と短所について説明しました。

最初に、データベース層とアプリケーション層の両方で計算を実行することの利点について説明しました。 次に、説明したすべての要因に基づいて計算を実行することについての結論を要約しました。