1.metaQ服務器消息過濾,有broker服務端過濾和客戶端過濾
2.MetaQ寫文件是順序寫,讀是隨機讀,怎麼提高讀的效率,竟然是page cache和內存映射,這裏暫時認爲他們是同一個東西。參考下面:
通過內存映射的方式讀寫文件
metaq在文件讀寫操作上做了一定的優化,使用內存映射的方式完成讀寫,替代了傳統的IO操作,從而大大的減少了文件讀寫系統調用的次數,提升了IO的性能。
傳統的文件訪問:
- 系統調用打開文件,獲取文件描述符
- 使用read write 系統調用進行IO
- 系統調用關閉文件
這種方式是非常低效的, 每一次I/O操作都需要一次系統調用。 另外, 如果若干個進程訪問同一個文件, 每個進程都要在自己的地址空間維護一個副本, 浪費了內存空間
內存映射的方式:
- 打開文件,得到文件描述符。
- 獲取文件大小
- 把文件映射成虛擬內存(mmap)
- 通過對內存的讀寫來實現對文件的讀寫(memset或memcpy)
- 卸載映射
- 關閉文件
首先建立好虛擬內存和磁盤文件之間的映射(mmap系統調用),當進程訪問頁面時產生一個缺頁中斷,內核將頁面讀入內存(也就是說把磁盤上的文件拷貝到內存中),並且更新頁表指向該頁面。
所有進程共享同一物理內存,物理內存中可以只存儲一份數據,不同的進程只需要把自己的虛擬內存映射過去就可以了,這種方式非常方便於同一副本的共享,節省內存。
經過內存映射之後,文件內的數據就可以用內存讀/寫指令來訪問,而不是用Read和Write這樣的I/O系統函數,從而提高了文件存取速度。
3.順序,metaq提高嚴格順序和普通順序或者說局部順序,前者適用於mysql數據庫binlog這類的同步,後者適合普通業務上消息順序
4.metaQ做分佈式事務