in tsfile-viewer-core/src/main/java/org/apache/iotdb/tool/core/util/TsFileEncodeCompressAnalysedUtil.java [382:421]
public static List<EncodeCompressAnalysedModel> sortedAnalysedModel(
Map<String, EncodeCompressAnalysedModel> map) {
List<EncodeCompressAnalysedModel> sortedCostModels =
map.values().stream()
.sorted(Comparator.comparing(EncodeCompressAnalysedModel::getCompressedCost))
.collect(Collectors.toList());
List<EncodeCompressAnalysedModel> sortedCompressedModels =
map.values().stream()
.sorted(Comparator.comparing(EncodeCompressAnalysedModel::getCompressedSize))
.collect(Collectors.toList());
Map<String, EncodeCompressAnalysedModel> scoresMap = new HashMap<>();
// 计算压缩得分
for (int i = 0; i < sortedCompressedModels.size(); i++) {
EncodeCompressAnalysedModel model = sortedCompressedModels.get(i);
double compressedScores =
compressedWeight * (1 - (double) model.getCompressedSize() / model.getOriginSize());
double sequenceScores = 0;
double rate = (double) i / sortedCostModels.size();
if (rate < zeroRate) {
sequenceScores = compressedSequenceWeight * (1 - rate);
}
model.setScore(compressedScores + sequenceScores);
String key = model.getCompressName() + "-" + model.getEncodeName();
scoresMap.put(key, model);
}
// 计算耗时得分
for (int i = 0; i < sortedCostModels.size(); i++) {
EncodeCompressAnalysedModel model = sortedCostModels.get(i);
double sequenceScores = 0;
double rate = (double) i / sortedCostModels.size();
if (rate < zeroRate) {
sequenceScores = compressedCostWeight * (1 - rate);
}
String key = model.getCompressName() + "-" + model.getEncodeName();
scoresMap.get(key).setScore(scoresMap.get(key).getScore() + sequenceScores);
}
return scoresMap.values().stream()
.sorted(Comparator.comparing(EncodeCompressAnalysedModel::getScore).reversed())
.collect(Collectors.toList());
}