Cassandra Memtable类型和大小分配

Cassandra Memtable类型和大小分配,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,在Cassandra 3.11.2中,Memtable分配的类型有3种选择,根据我的理解,如果我想在JVM堆上保留Memtables,我可以使用堆缓冲区,如果我想在JVM堆之外存储Memtables,那么我有两个选项堆外缓冲区和堆外对象 为堆外分配提供的两种选择之间的区别到底是什么 此外,可在YAML文件中的两个位置设置用于Memtables的允许内存空间,即memtable\u heap\u space\u in_mb和memtable\u offheap\u space\u in_mb 我是

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

为堆外分配提供的两种选择之间的区别到底是什么

此外,可在YAML文件中的两个位置设置用于Memtables的允许内存空间,即
memtable\u heap\u space\u in_mb
memtable\u offheap\u space\u in_mb

我是否需要在堆和堆外配置一些空间,无论Memtable分配类型是什么,还是我只需要根据我的Memtable分配类型设置其中一个,即
Memtable\u heap\u space\u in_mb
当使用
堆缓冲区
Memtable\u offheap\u space\u in_mb
时,仅当使用其他两个堆外缓冲区时选项?

  • heap\u buffers(默认设置)使用Java NIO在堆上分配memtables

  • offheap\u buffers使用相同的Java NIO在堆上和堆外分配每个memtable的一部分

  • offheap\u对象直接使用本机内存,因此Cassandra将自行管理memtable内存(分配和垃圾收集)。这个功能没有很好的文档记录,所以最好不要使用它


对于memtable\u heap\u space\u in_mbmemtable\u offheap\u space\u in_mb我认为最好坚持默认值。对于每个堆,默认值为总堆大小的1/4。但是,如果您计划更改某些内容,可能最好做一些非常小的更改,因为这会减少Cassandra可以使用的内存量。

因此,如果我们将memtable分配类型用作“offheap\u对象”,那么“memtable\u heap\u space\u in_mb”就没有用了?在这种情况下,可以从YAML中注释掉它?无论使用哪种堆外设置,@VishalSharma,您仍将使用memtable堆空间。根据表中列的类型,您可能需要或多或少的堆外和堆端。检查服务器日志以查看哪个MEMIT区域通常是触发刷新的限制因素,并考虑平衡这两个,以使两者都有可能触发刷新。