私は Hadoop ジョブ内でいくつかの作業を行っており、オブジェクト階層間の Dozer マッピングをすばやく取得することができました。Thrift 型に変換する必要がある複雑なオブジェクトがいくつかあります。このマッピングを有効にすると、5 分間の処理実行に約 5 分間の実行時間が追加されます (10 分になります) プラスまたはマイナスの変動があります。Dozer の統計を出力していますが、マッピングに 5 分を費やしていることが明確に示されています。これをスピードアップする方法はありますか?リフレクションを介してマッピングを自動マッピングするのと比較して、マッピングを定義する利点はありますか?
これは私が統計を印刷する方法です:
GlobalStatistics stats = GlobalStatistics.getInstance();
for (Statistic stat : stats.getStatsMgr().getStatistics()) {
for (StatisticEntry entry : stat.getEntries()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
そして、これは出力です:
SUPER_TYPE_CHECK: 970293
SUPER TYPE CHECK: 6
MAPPER_INSTANCES_COUNT: 1
MAPPING_SUCCESS_COUNT: 10093
FIELD_MAPPING_SUCCESS_COUNT: 25883488
MAPPING_TIME: 478486
私が興味を持っていることの 1 つは、生成された Thrift クラスに public フィールドと getter/setter メソッドがあることです。戻って、プライベート フィールドを使用して Bean スタイルで再生成する必要があります。Dozer は、これらのパブリック フィールドで余分な作業を行うでしょうか? このマッピングを高速化するにはどうすればよいですか? 開発時間と実行時間のトレードオフがあることはわかっており、いつでも独自の変換を実装することができますが、Dozer を使用することによるパフォーマンスの低下の大きさに驚いています。私は何か間違ったことをしていますか?
また、dozer のキャッシュ ヒット率に関する統計データが表示されないのはなぜですか? このページは、より多くの統計が利用可能であるべきであることを示しています: http://dozer.sourceforge.net/documentation/configuration/statistics.html