Fix performance of extractKeys
for very small sets.
#2804
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
It turned out that #2801 introduced a slight regression instead of an expected improvement in performance, which was discovered with profiling a db-analyser run.
After looking at profiling report it was immediately obvious to me why the regression actually happened:
extractKeys
is called a lot, but it is always called with a large Map (UTxO) and a very small Set (number ofTxIn
s). Implementation added in #2801 was benchmarked for Sets of size 100 and 100000, which performed quite well. However, majority of timesextractKeys
is called with the Set that has number of elements in single digits. Comparing performance of old and new implementations, confirmed my suspicion: we already had very fast implementation before #2801That being said, there is no reason to discard a function that performs well, therefore this PR adopts both implementations for the
extractKeys
functions, making it fast for both large and small inputs alike. This can prove useful in the future if we start getting many transactions with large number of outputs.