HotRing Java实现

HotRing是阿里2020年发表的一篇存储论文,估计很多人没听过,但是它很有意思,特别对于hash场景下的热点优化有很大的效果。简单来说,hotring就是在超高qps场景下如何快速访问热点数据。

https://github.com/azhsmesos/hotring

应该算是全网第一个Java实现版本,当然时间问题还在优化当中,但是可以先看看benchmark效果

工作负载 theta  = 2 幂律分布因子

数据量级 10 ^ 7 数据 工作负载及其不均衡 的数据集 key是key,value是key出现的查询次数

可以看到分布及其不均匀,完全就是热点key场景

测试指标:

  • findCnt 总的查找次数 反应完成任务的系统开销
  • maxFindCnt 单次最高查找次数  反应系统的尾延迟,越低越好
  • minFindCnt 最小查找次数 单次最优表现
  • averageFindCnt: 平均查找次数
  • Use Time:总耗时

theta

工具

性能参数

2

HashTable

2

KHotRingCache

2

HashMap

1

HashTable

1

KHotRingCache

1

HashMap

0

HashTable

0

KHotRingCache

0

HashMap

从上面看到,因为HotRing的热点偏移特性,其查找次数和平均查找次数远远低于hashTable(底层是拉链法实现)

和jdk官方hashmap比较,由于jdk官方hashmap我不方便统计其红黑树的访问次数,仅仅访问了其get(方法的次数),也基本和khotRingCache持平,如果将其红黑树内部的item元素的遍历访问次数加上,肯定比KHotRingCache要多,这也说明KHotRingCache在工作负载不均衡,也就是有热点数据区间时,其查找次数要低于没有热点检测的map结构。至于耗时问题,可能我的链表增删改查实现和jdk官方还有很大差距,所以导致耗时会比hashmap高上50%左右,当然当前我还没有用上优化,仅仅实现了论文的随机热点检测,后续会实现采样热点检测,对于官方的很多字节上的优化我也会参考,不过想要在耗时上面超过官方还是有很大挑战性(也就是说要达到生产环境级别)。

而分布很均匀的时候,可以发现其实HotRing和HashTable的执行次数区别不大,因此hotRing适合于在热点分布很高(幂律分布)下使用。

下篇文章在介绍其实现原理,和benchmark的过程,代码已经放到github,不过短期内会重新迭代,欢迎点个star

#晒一晒我的offer##我的求职思考##校招##秋招##实习#
全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-18 15:35
程序员牛肉:完全是在胡写简历。 我很好奇你干嘛要在教育经历里面写你是软件二班的班长?你写它的目的是什么?我觉得真的就是很突兀。给我第一感觉就是:你真的是一个心智健全的成年人吗? 另外我也很好奇你是怎么做到参加了这么多所谓的计算机比赛,完事儿一个拿得出手的项目都没有。 自己的项目经历还是图书馆管理系统这种垃圾东西……我的的建议是你都不如大幅度删减一下自己的水奖项,看着真的给人一种又水又学傻了的感觉。 计算机不看奖项,看院校和个人能力。 计算机是强工科,你要投后端的你就应该明白,人家招你进去是指望你干活儿的。那你觉得你这份简历有展示出你的后端水平吗? 你动动你的脑子想一想,人家面试官要想通过你的简历看出你的项目开发能力,最重要的板块就是两个,第一个是你的实习,第二个是你的项目。你没有实习,是不是就应该在项目上好好琢磨琢磨? 你自己看看你项目写的什么描述,你作为一个要后端岗位的应届生,你对你自己项目的描述还仅仅停留在使用mySQL,使用JAVA,使用spring boot框架。给人一眼感觉就感觉完全就是你做的玩具。可能就是你哪一个学期做的课设。 对于应届生来讲,在项目板块要尽量突出自己的技术能力,因为谈业务你肯定也不懂。简单来讲,你的项目要清晰准确的表达:你用哪种技术解决了现有的哪种技术问题,带来了多少的效益提升? 所有关于项目的描述都围绕我说的这种表达方式去写。不要自己自嗨式的写一堆垃圾上去 你既没有实习项目,又没有一个比较好一点的项目,而且院校也比较差,所以找工作会异常的难找。
点赞 评论 收藏
分享
出自剑来:找工作就是运气大于实力的事 我们组的应届生也是上周在牛客招聘被百度的捞了,一周速通下of
点赞 评论 收藏
分享
评论
2
7
分享
牛客网
牛客企业服务