save 12ms in when checking if cached writer can be used

This commit is contained in:
2016-12-29 19:33:45 +01:00
parent f520f18e13
commit 58bb64c80a
3 changed files with 16 additions and 11 deletions

View File

@@ -6,6 +6,7 @@ import java.util.Comparator;
public class PdbWriterByTimeAsc implements Comparator<PdbWriter> {
public static final PdbWriterByTimeAsc INSTANCE = new PdbWriterByTimeAsc();
public static final Comparator<PdbWriter> REVERSED = INSTANCE.reversed();
@Override
public int compare(final PdbWriter o1, final PdbWriter o2) {

View File

@@ -59,7 +59,6 @@ public class PerformanceDb implements AutoCloseable {
final int blocksize = 10000;
long count = 0;
final double durationInManager = 0;
try {
long start = System.nanoTime();
@@ -75,10 +74,7 @@ public class PerformanceDb implements AutoCloseable {
final Tags tags = entry.getTags();
final OffsetDateTime date = entry.getDate();
final long s = System.nanoTime();
final PdbWriter writer = tagsToFile.getWriter(date, tags);
final long e = System.nanoTime();
Stats.duration += (e - s) / 1_000_000.0;
writer.write(entry);
count++;

View File

@@ -6,6 +6,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -160,7 +161,10 @@ public class TagsToFile implements CollectionUtils, AutoCloseable {
final PdbWriter result;
final WriterCache writersForTags = getOrInit(tags);
final long s = System.nanoTime();
final Optional<PdbWriter> optionalWriter = chooseBestMatchingWriter(writersForTags.getWriters(), date);
final long e = System.nanoTime();
Stats.duration += (e - s) / 1_000_000.0;
if (optionalWriter.isPresent()) {
result = optionalWriter.get();
@@ -183,13 +187,17 @@ public class TagsToFile implements CollectionUtils, AutoCloseable {
}
private Optional<PdbWriter> chooseBestMatchingWriter(final List<PdbWriter> writers, final OffsetDateTime date) {
final List<PdbWriter> candidateWriters = filter(writers, writer -> {
final OffsetDateTime offsetTime = writer.getDateOffset();
return !date.isBefore(offsetTime);
});
final List<PdbWriter> sortedCanditateWriters = sorted(candidateWriters, PdbWriterByTimeAsc.INSTANCE.reversed());
final Optional<PdbWriter> optionalFirst = findFirst(sortedCanditateWriters);
return optionalFirst;
Collections.sort(writers, PdbWriterByTimeAsc.REVERSED);
for (final PdbWriter pdbWriter : writers) {
final OffsetDateTime offsetTime = pdbWriter.getDateOffset();
if (!date.isBefore(offsetTime)) {
return Optional.of(pdbWriter);
}
}
return Optional.empty();
}
private WriterCache getOrInit(final Tags tags) {