我有关于Cassandra Memtable的问题。感谢您的帮助。
Memtable的相关信息:
1) 存放在RAM中;
2) 每个ColumnFamily结构都有一个memtable;
3) 一个ColumnFamily可以存在多个memtable;
问题:
1) 什么时候会为ColumnFamily创建额外的memtable?需要满足什么条件?我认为在创建额外的commit log文件后会创建额外的memtable。这是正确的吗?
2) 达到commit log大小阈值后会发生什么?我认为会开始将memtable放入队列;在队列填满后,将开始将memtable刷新到sstable,然后删除旧的commit log(在hdd上)和相应的memtables(在ram中)。在这种情况下,部分memtable内存将始终为空,并且commit log始终会被填满90-100%吗?
3) 当达到memtable大小阈值时会发生什么?与前面的情况类似,会开始刷新到sstable吗?某些部分的commit log也将始终为空,并且memtable内存将填满90-100%吗?
4) 关于memtable_allocation_type: 在官方资源中 - "offheap_buffers将单元格名称和值移动到DirectBuffer对象中。这对读取的影响最小-值仍然是“活动”的Java缓冲区-但仅在存储大字符串或blob时才会显着减少堆内存."。DirectBuffer是什么意思?它放置在Java堆中吗?您能提供一些关于此的信息网站链接吗?
非常感谢!