Optimize message bus topic-matching logic by 100× #2634
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.
Pull Request
NautilusTrader prioritizes correctness and reliability, please follow existing patterns for validation and testing.
Summary
The message bus using pattern matching to identify subscribed topics to publish to. Message bus is on the hot path since each data item travels through it to respective strategies and components so performance and correctness is critical.
This PR adds regex based testing to validated matching logic with randomized testing. It also introduces an iterative algorithm with improves upon current implementation by 100x.
Using criterion shows that
Backtracking can give very poor performance if the pattern is implemented poorly and as many wildcards. It also works well assuming that the pattern and topic length are small (<256 char). For 2000+ subscriptions with complex patterns consider adding a dynamic switch to regex based matching.
Type of change
Testing
Ensure new or changed logic is covered by tests.
Add randomized testing for matching logic with existing regex implementation as reference.