测试case为什么会发生如此大的性能差距

电子说

1.3w人已加入

描述

稳定复现的 HashMap 陷阱

当我们看了很多哈希函数的介绍并切换到一个你认为更快的哈希函数上面时,大部分代码都获得了预期的速度提升,但有些部分却莫名其妙地变慢了很多,尤其是在处理大型 hashMap 时。

如果这听起来很熟悉,那么您可能遇到了稳定复现的 HashMap 陷阱。

Google SwissTable 是 2017 年 CppCon 上被发表的一个高性能的 hashTable 。

从 Rust 1.36 开始,SwissTable 就是 Rust HashMap 的标准库实现。

虽然它有不错的性能,但 SwissTable 旨在以性能为代价抵御一类 HashDoS 攻击。

如果您关心性能并且不关心安全问题,切换到类似 FxHasher 或者 ahash 可以显着提高性能。

然而,这个建议的代价却很少有人提及 —— 一些 O(n) hashTable 操作,包括反序列化,在一些 case 下它的时间复杂度有可能会升级到 O(n**2)。

下面博文会给大家带来测试 case 以及为什么会发生如此大的性能差距

https://morestina.net/blog/1843/the-stable-hashmap-trap

CnosDB 2.0 发布

特色功能:

专为时序数据设计的存储引擎,优化写操作,支持删除和更新操作;

压缩算法由用户灵活指定,压缩比可调;

基于 Apache Arrow 及 DataFusion 实现了查询引擎;

支持标准 SQL,支持 Schemaless 写入;

多索引优化了查询效率;

生态友好,支持 RESTful 接口,支持 Telegraf、Grafana 等通用第三方生态组件。

快速上手指南:http://docs.cnosdb.com

GitHub仓库: https://github.com/cnosdb/cnosdb






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分