2

コンテクスト:

  1. 私はJavaベースのアプリケーションを持っています、たとえばAppA
  2. データベースにクエリを実行します。たとえば、DataD
  3. それはそのデータに作用し、いくつかの魔法を実行し、それを別のアプリケーション、たとえばAppBに渡します

問題:

  1. DataDのデータ量は非常に多いです。
  2. 私のAppAは、すべてのデータを一度に処理する機能を実際には備えていません。
  3. 私のAppBも、一度にすべてのデータを取得することにあまり関心がありません。

解決:

  1. DataDからデータをクエリしたいのですが、一度に10,000(構成可能)の束でのみです。
  2. AppAでそのバッチを処理し、それをAppBに渡してから、DataDで別のクエリを実行します。
  3. DataDに、すでに読んだレコードの数を伝え、次の10,000を与えるように依頼する必要があります。したがって、どういうわけか、私のAppAは最後に読み取られた番号を追跡し、DataDにデータの範囲を効果的にクエリする賢い方法を持っている必要があります。
  4. 私のDataDには、すでに返送されたもののカウントを維持する(またはフラグを維持する)方法がありません。これはデータベースであり、SOA/RESTインテリジェンスをその上に置くこともできません。したがって、私のAppAは、特定の範囲のクエリを実行するのに十分なインテリジェントである必要があります。

質問:

  1. コアJavaであまり多くのジャグラーに頼ることなく、これを達成するために何らかのフレームワークを使用することはどういうわけか可能ですか?私が呼んでいるもの-「データストリーミング」?もしそうなら、どのように?
4

1 に答える 1

2

複雑に聞こえますが、できるだけシンプルにすることをお勧めします。

AppA にクエリを実行させ、取得した各行を処理し、派生データを AppB がリッスンしているソケットに書き込みます。これがパフォーマンスの問題を引き起こすことがわかっていない限り、これ以上複雑にすることはありません。

于 2012-09-03T14:31:23.910 に答える