堆內和堆外
02-12
堆Heap, Java程序操作對象的主要空間。
Ignite支持兩種存儲模式:堆內和堆外。
堆內onHeap,顯然就是把所有數據都存儲在Heap內。
而堆外offHeap,則指得是JVM之外內存之內的空間。
兩種模式除了空間區域的區別之外,還有性能上的差異。
數據訪問時,堆內要比堆外高20%以上。就這個問題,曾經在slack上求證過Dennis Magda,
後來也做過測試驗證過這一問題。如果你追求性能的極致性,毫無疑問推薦你使用堆內模式。
那堆外模式的優勢呢? 則是內存空間的節省。對很多公司來說,內存計算還屬於比較昂貴的方案。所以在使用Ignite之前,需要做數據規劃,比如要放多少數據進去,查詢影響時間要求等等。
按我的經驗,通常1條數據大概在1K左右,也就是說如果放到堆里1M的數據的開銷大概在1G左右,如果採用堆內模式,還需要考慮committed的空間,這個要在5倍以上。所以如果你要採用堆內模式,你需要的Heap分配至少為5G。而在堆外則沒有這個空間的膨脹了。
總結下:
堆內求性能,堆外要得是空間節省。
推薦閱讀:
※用Apache Spark進行大數據處理——第一部分:入門介紹
※大數據架構師技能
※RDD論文翻譯:基於內存的集群計算容錯抽象
TAG:大數據 |