telegraf/plugins
Patrick Hemmer 910b726876
Optimize SeriesGrouper & aggregators.merge (#8391)
The previous implementation of SeriesGrouper required breaking a metric object apart into its constituents, converting tags and keys into unoptimized maps, only to have it put them back together into another metric object. This resulted in a significant performance overhead. This overhead was further compounded when the number of fields was large.

This change adds a new AddMetric method to SeriesGrouper which preserves the metric object and removes the back-and-forth conversion.

Additionlly the method used for calculating the metric's hash was switched to use maphash, which is optimized for this case.

----

Benchmarks

Before:

    BenchmarkMergeOne-16          106012	     11790 ns/op
    BenchmarkMergeTwo-16           48529	     24819 ns/op
    BenchmarkGroupID-16           780018	      1608 ns/op

After:

    BenchmarkMergeOne-16          907093	      1173 ns/op
    BenchmarkMergeTwo-16          508321	      2168 ns/op
    BenchmarkGroupID-16         11217788	      99.4 ns/op
2021-01-07 11:39:12 -05:00
..
aggregators Optimize SeriesGrouper & aggregators.merge (#8391) 2021-01-07 11:39:12 -05:00
common common/tls: Allow specifying SNI hostnames (#7897) 2020-12-23 13:39:43 -06:00
inputs Using mime-type in prometheus parser to handle protocol-buffer responses (#8545) 2021-01-07 11:21:09 -05:00
outputs Upgrade circle-ci config to v2.1 (#8621) 2021-01-06 16:23:29 -06:00
parsers Using mime-type in prometheus parser to handle protocol-buffer responses (#8545) 2021-01-07 11:21:09 -05:00
processors Fix spelling and clarify docs (#8164) 2020-12-23 10:43:21 -06:00
serializers Add prometheus remote write serializer (#8360) 2020-12-16 14:11:05 -05:00