laohu created ROCKETMQ-382: ------------------------------ Summary: 实现数据内存话,不用mappedbytebuffer Key: ROCKETMQ-382 URL: https://issues.apache.org/jira/browse/ROCKETMQ-382 Project: Apache RocketMQ Issue Type: New Feature Components: rocketmq-store Affects Versions: 4.3.0 Reporter: laohu Assignee: yukon Fix For: 4.3.0
在去年rocketmq深圳会议中,看到rocketmq5.0会实现内存话.这是一个振奋人心的特性,解决内存占用的问题,无法优秀的使用一次性写的,一次性写大多人都没有事情,因为会出现网络阻塞。 5.0的出现可能需要很久,但是对这个特性,很需要。 做了如下分析。 mappedbytebuffer分析 mappedbytebuffer是调用底层mmap体系 # 优点 ## 实现简单 ## 维护由系统管理 ## 内存使用灵活 # 缺点 ## 占用大量的内存,造成资源浪费 ## 因为系统管理,内存使用灵活 。在高峰随机读写情况,性能堪忧 ## 容易出现未知的情况 ## 在高并发情况下,一次写特性造成io堵塞 ## 个个操作系统实现不一样,(这是一个神坑,一个月的努力,坑没了) 基于DirectBuffer实现,可以解决mappedbytebuffer的缺点,同时可以提升一定的性能。更加灵活。 实现大概细节 # 重写 mappedFile文件 # DirectBuffer基本管理模块 # 把文件读到内存,是一次把整个文件加载到内存,还是需要才加载 # 文件读取方式,是调用操作系统的api(整个坑多),还是自己实现异步加载 # 等等 欢迎各路大神,支出不足,遗漏,补充。 -- This message was sent by Atlassian JIRA (v7.6.3#76005)