標籤:

堆內和堆外

堆Heap, Java程序操作對象的主要空間。

Ignite支持兩種存儲模式:堆內和堆外。

堆內onHeap,顯然就是把所有數據都存儲在Heap內。

而堆外offHeap,則指得是JVM之外內存之內的空間。

兩種模式除了空間區域的區別之外,還有性能上的差異。

數據訪問時,堆內要比堆外高20%以上。就這個問題,曾經在slack上求證過Dennis Magda,

後來也做過測試驗證過這一問題。如果你追求性能的極致性,毫無疑問推薦你使用堆內模式。

那堆外模式的優勢呢? 則是內存空間的節省。對很多公司來說,內存計算還屬於比較昂貴的方案。所以在使用Ignite之前,需要做數據規劃,比如要放多少數據進去,查詢影響時間要求等等。

按我的經驗,通常1條數據大概在1K左右,也就是說如果放到堆里1M的數據的開銷大概在1G左右,如果採用堆內模式,還需要考慮committed的空間,這個要在5倍以上。所以如果你要採用堆內模式,你需要的Heap分配至少為5G。而在堆外則沒有這個空間的膨脹了。

總結下:

堆內求性能,堆外要得是空間節省。

推薦閱讀:

用Apache Spark進行大數據處理——第一部分:入門介紹
大數據架構師技能
RDD論文翻譯:基於內存的集群計算容錯抽象

TAG:大數據 |