在Cassandra 3.11.2中,Memtable分配的类型有3种选择,根据我的理解,如果我想在JVM堆上保留Memtables,我可以使用 heap_buffers
和如果我想在JVM堆之外存储Memtables,那么我有2个选项 offheap_buffers
和 offheap_objects
。
为堆外分配给出的两个选择之间究竟有什么区别?
此外,用于Memtables的允许内存空间可以设置在YAML文件中的2个位置,即 memtable_heap_space_in_mb
和 memtable_offheap_space_in_mb
。
我是否需要在堆和offheap中配置一些空间,无论Memtable分配类型如何,或者我是否需要根据我的Memtable分配类型设置其中一个空格,即 memtable_heap_space_in_mb
使用 heap buffers
和 memtable_offheap_space_in_mb
时,仅在使用其他2个offheap选项时?
答案 0 :(得分:2)
heap_buffers (这是默认值)使用Java NIO在堆上分配memtables。
offheap_buffers 使用相同的Java NIO在堆上和堆外分配每个memtable的一部分。
offheap_objects 直接使用本机内存,因此Cassandra将自行管理可记忆内存(分配和垃圾回收)。这个功能没有很好的记录,所以最好不要使用它。
对于 memtable_heap_space_in_mb 和 memtable_offheap_space_in_mb ,我认为最好坚持使用默认值。对于每个,默认值是总堆大小的1/4。但是如果你打算改变某些东西,可能最好做一些非常小的改动,因为它会减少Cassandra可以使用的内存量。