[BEAM-3306] Hash keys when lifting #7812
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.
Hash key values when combiner lifting using the registered coder for the type.
Specialized for numeric primitive types to avoid unnecessary work.
This turns out to be faster than the general "interface{}" hashing we had previously for numeric type, and is comparable, but marginally slower than native maps with the primitive numeric type as keys.
Strings are currently much slower as keys than the native go runtime approach for interfaces{}, as the runtime uses a better hash function.
General struct performance (for values Go supported as keys) will be much slower than the go runtime.
Pointer elements (with coders) used as keys will be slower, but they'll also be correct, which wasn't the case previously.
Care needs to be taken using Maps in Key values, as the Go SDK does not presently sort maps in any fashion prior to encoding. Combined with go map's random iteration order, means combines with such keys will not be valid.
A separate in PR will add vetting for this case, to discourage the use of map fields in key types.
Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:
R: @username
).[BEAM-XXX] Fixes bug in ApproximateQuantiles
, where you replaceBEAM-XXX
with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.Post-Commit Tests Status (on master branch)