Memtable 类型和大小分配

Memtable type and size allocation

在 Cassandra 3.11.2 中,Memtable 分配类型有 3 种选择,根据我的理解,如果我想将 Memtables 保留在 JVM 堆上,我可以使用 heap_buffers 如果我想将 Memtables 存储在 JVM 堆之外,那么我有 2 个选项 offheap_buffersoffheap_objects

堆外分配的两种选择到底有什么区别?

此外,可以在 YAML 文件中的 2 个位置设置用于 Memtables 的允许内存 space,即 memtable_heap_space_in_mbmemtable_offheap_space_in_mb

我是否需要在堆和堆外配置一些 space,而不考虑 Memtable 分配类型,或者我是否只需要根据我的 Memtable 分配类型设置其中一个,即 memtable_heap_space_in_mb 当使用 heap buffersmemtable_offheap_space_in_mb 仅当使用其他任何一个时2 个堆外选项?

  • heap_buffers(默认)使用 Java NIO 在堆上分配内存表。

  • offheap_buffers 使用相同的 Java NIO 在堆上和堆外分配每个 memtable 的一部分。

  • offheap_objects直接使用本地内存,所以Cassandra会自己管理memtable内存(包括分配和垃圾回收)。此功能没有很好的文档记录,因此最好不要使用它。

对于 memtable_heap_space_in_mbmemtable_offheap_space_in_mb 我认为最好坚持使用默认值。对于每个,默认值为总堆大小的 1/4。但是,如果您打算更改某些内容,可能最好进行非常小的更改,因为它会减少 Cassandra 可以使用的内存量。