中年|做开发的到底要不要掌握算法?需要掌握到什么程度?( 三 )
以上就解释了什么是_warmEntries , 并且为什么需要_warmEntries 。
可以看到朴素的算法在真正工程上的应用还是需要看具体的业务场景的 , 不可生搬硬套 。 并且彻底的理解算法也是很重要的 , 例如死记硬背二分 , 怕是看不出来以上的问题 。 还有底层知识的重要性 。 不然也是看不出来对缓存不友好的 。
从Kafka的索引冷热分区到MySQL InnoDB的缓冲池管理
从上面这波冷热分区我又想到了MySQL的buffer pool管理 。 MySQL的将缓冲池分为了新生代和老年代 。 默认是37分 , 即老年代占3 , 新生代占7 。 即看作一个链表的尾部30%为老年代 , 前面的70%为新生代 。 替换了标准的LRU淘汰机制 。
MySQL的缓冲池分区是为了解决预读失效和缓存污染问题 。
1、预读失效:因为会预读页 , 假设预读的页不会用到 , 那么就白白预读了 , 因此让预读的页插入的是老年代头部 , 淘汰也是从老年代尾部淘汰 。 不会影响新生代数据 。
2、缓存污染:在类似like全表扫描的时候 , 会读取很多冷数据 。 并且有些查询频率其实很少 , 因此让这些数据仅仅存在老年代 , 然后快速淘汰才是正确的选择 , MySQL为了解决这种问题 , 仅仅分代是不够的 , 还设置了一个时间窗口 , 默认是1s , 即在老年代被再次访问并且存在超过1s , 才会晋升到新生代 , 这样就不会污染新生代的热数据 。
小结
文章先从索引入手 , 这就是时间和空间的互换 。 然后引出Kafka中索引存储使用了相对位移值 , 节省了空间 , 并且讲述了索引项的访问是由二分查找实现的 , 并结合Kafka的使用场景解释了Kafka中使用的冷热分区实现改进版的二分查找 , 并顺带提到了下一致性Hash , 再由冷热分区联想到了MySQL缓冲池变形的LRU管理 。
这一步步实际上都体现算法在工程中的灵活运用和变形实现 。 有些同学认为算法没用 , 刷算法题只是为了面试 , 实际上各种中间件和一些底层实现都体现了算法的重要性 。
不说了 , 头有点冷 。
【来源:Java大数据高级架构师】
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。邮箱地址:newmedia@xxcb.cn
推荐阅读
- 中子|中子的寿命到底有多长?多种方法试错,谜题亟待解决!
- 帐户|苹果发布声明:确定 Epic Games 开发账户被终止
- 人工智能|商汤科技林达华:OpenMMLab助开发者缩短AI项目路径
- 中年|北斗“一张网”可实现全天候、高精度、自主可控服务
- 中年|Python编程语言有什么独特的优势呢?
- NOFAKE无假|一天到晚说我不配套,这鞋盒到底哪里不配套?
- 中年|谈一谈我的十年机械工作经历
- 中年|弹无虚发的背后,国产弹药质量把关人,精密机床都要自叹不如
- 中年|宿迁深圳招商再结硕果,签约项目19个,协议总投资158亿元
- 拼多多|越补越疯狂!拼多多瞄准文教领域,一招要让学生党省钱到底