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)

Reply via email to