给定一些使用流处理大量项目的代码,检测日志记录和性能/分析的各个步骤的最佳方法是什么?
实际示例:
ReactiveSeq.fromStream(pairs)
.filter(this::satisfiesThreshold)
.filter(this::satisfiesPersistConditions)
.map((pair) -> convertToResult(pair, jobId))
.flatMap(Option::toJavaStream)
.grouped(CHUNK_SIZE)
.forEach((chunk) ->
{
repository.save(chunk);
incrementAndReport();
});
reportProcessingTime();
记录进度很重要,因此我可以在另一个线程中触发更新用户界面的进度事件。
跟踪此流中过滤和映射步骤的性能特征是可取的,以查看可以在哪些地方进行优化以加快速度。
我看到三个选项:
- 将日志记录/分析代码放在每个函数中
peek
在每个步骤中使用而不实际使用该值- 某种基于注释或 AOP 的解决方案(不知道是什么)
哪个是最好的?关于#3 的样子有什么想法吗?还有其他解决方案吗?