バッチジョブで計算を行う際にIgnite対ストアドプロシージャのパフォーマンスのPOCを実行しています。ループでは、キャッシュからApache Igniteのパフォーマンス
- 読む(
SELECT
INNER JOIN
と(主キーの2つのテーブル)と簡単なWHERE
句小さなテーブルの上に(日付列)) - :バッチ・ジョブは、次の手順を持っていますいくつかの計算(乗算)を行い、結果をキャッシュに書き戻します。
#1で返されたレコードの数は、#2で書き込まれたレコードの数に比例します。比較されるRDBMSはSQL Serverです。
私は、読み書き操作にIgniteを使用するコードを実装しました。ストアドプロシージャで同じ操作を実装しました。私は、テストを実行したとき、私はのIgniteはそんなに遅くなることがわかった。22万レコードの大きさに、ここで全体のジョブを実行する合計時間です:
- SQL Serverのストアドプロシージャ:9秒
- のIgnite:2時間40分
注:
- のIgnite構成は、単一のサーバー・ノード上で、
CacheAtomicityMode.TRANSACTIONAL
とCacheMode.LOCAL
に設定されています。トランザクションの境界は、各ステップの前後です。 - 結果が同じであることを確認しました。彼らは同じことをやっている、
- マシンが16ギガバイトのRAMを持っている何のコーディング問題はありません、CPUは、私はすでに頭上に遅くなるためであるとイグナイト期待していたテストを実行する前にi7の
、何もないです実際にはデータベース内で実行されているストアドプロシージャを破ることができます(例:db最適化のため)。しかし、私はこの違いが大きいことに驚いています。また、Igniteジョブ全体に対して、私のCPUファンはノンストップで回転していました。これは、計算が単純な乗算であり、キャッシュがRAM(サイレント)にあるので奇妙です。
私はCacheMode.PARTITIONED
モード(2つのサーバーノード、そのうちの1つはリモート、1つはクライアント)でジョブを実行しました。データセットはわずかに小さくなりました(145kレコード)。これの合計実行時間は1時間8分です。この時間を220kレコード(初期設定と同じ)に投影すると、1時間43秒(約)で、これはCacheMode.LOCAL
よりも高速ですが、この種のボリュームでは予想よりもかなり遅くなります。 (220kはあまりありません)
実装やチェックが必要な設定を教えていただければ幸いです。ありがとうございました!
私は後に私は今解決された設定の問題があることを認識しました。今は実行時間がずっと良い7秒です。しかし、私はまだアフィニティキーを働かせることができません - 私は質問をするために新しいSOを調達しました。 https://stackoverflow.com/questions/47839555/ignite-affinitykeymapped-for-cache-keys-that-are-integers – aol
@aol実行時間を7に短縮するためにどのような設定変更を行ったか教えてください2時間から秒? –