2016-05-30 7 views
2

春RESTful Webサービス - 高容量のデータ処理私は春/春Boot- RESTfulなWebサービスを構築しようとしている

CSVは、各行が1万行/ 40列のファイル受け付け
  1. 入力として(角度ベースのフロントエンドから)同期呼び出しになります。他の画面に進む前に、アップロードステータスを通知する必要があります。したがって、待ち時間は数分(例えば5分)を超えることはできません。

  2. これらの行のそれぞれは、DB内のものと照合され、有効であると判明した場合、同じものがDBに挿入されます。要するに、各行は独立した独立したトランザクションにすることができます。

これを実装するにはどうすればよいでしょうか?

現在のレガシーシステムでは、ストアドプロシージャと同じ機能が実装されています。これにより、ソリューションがDBと密接に結びついています。これは、RDBMSを変更する必要がある場合に問題になります。

  1. これらの100万のデータを非同期Webサービスコールでチャンク(たとえば20k)で処理するアプローチはありますか?

  2. スプリングバッチ?

  3. 上記の2つのオプションよりもストアドプロシージャを適切に実行することができます(推測できません)。

少なくとも、ストアドプロシージャと同じ方法で、提案されたソリューションに基づいて水平方向にスケールする方法をお手伝いしてください。

+0

API呼び出しはAPIの応答に依存していますか? –

+0

春のバッチ使用チャンク処理とマスタスレーブ設定を並列処理に実装し、バッチ更新することができます(失敗と成功の記録では異なります)。一時テーブルにすべてのレコードを格納して、一括挿入するプロシージャを呼び出します。 – surya

+0

グリッドサイズを適切に調整してください。http://www.mkyong.com/spring-batch/spring-batch-partitioning-example/ – surya

答えて

1

あなたは3つの推奨オプションを使用して適切なトラックにいます。あなたの質問に対する答えは、残念ながらです。それはに依存しています。

上記の方法のいずれかを使用すると効果的です。私は個人的にSpring Batchを好みますが、プログラミングモデルは簡単で直感的です。


Spring Batch Processing Guide

別のアプローチは、行の処理を並列化する Messagingを使用することであろう:コントローラが大量のデータを含むCSVファイルを受信

  1. スプリット小さな部分にデータ一時的なメッセージキューに送信
  2. 複数のワーカーノードがメッセージを受信して​​処理するそれら
  3. は(%完了)要するに

を一時キューのサイズを監視し、それに応じてユーザーを更新し、独自のドメインの知識は最終的にあなたのビジネスのための最善の解決に向けてご案内します。

+0

理由を考えてMQを検討したくない別の障害ポイント(MQサーバー/高負荷で何かがうまくいかない場合)が発生しますが、何百行ものデータ・ローで同じことを処理できます。同じことを春のバッチで行う必要がある場合は、どの人がどの行を処理しているかをどのように追跡するのですか?同じデータを複数のワーカーが処理するのを避けるには – Anand

関連する問題