【发布时间】:2015-05-13 00:35:25
【问题描述】:
我对 cassandra memtable 有一些疑问。我将不胜感激。
关于内存表的事实:
1) 放置在 RAM 中;
2) per-ColumnFamily 结构;
3) 单个列族可能存在多个 memtable;
问题:
1) 何时创建列族的附加内存表?需要什么条件?我假设在创建额外的提交日志文件后会创建额外的内存表。这是真的吗?
2) 达到提交日志大小阈值后会发生什么?我认为这将开始将 memtables 放入队列;队列填充后将开始将 memtable 刷新到 sstable,然后删除较旧的提交日志(在 hdd 上)和相应的 memtables(在 ram 中)。在这种情况下,memtable 内存的某些部分将始终为空,并且提交日志始终会被填充到 90-100%?
3) 当达到 memtable 大小阈值时会发生什么?像以前的情况一样会开始刷新到sstable吗?提交日志的某些部分也将始终为空,而 memtable 内存将被填充到 90-100%?
4) 关于memtable_allocation_type: 在官方资源中 - "offheap_buffers 将单元名称和值移动到 DirectBuffer 对象。这对读取的影响最小——这些值仍然是“活动”Java 缓冲区——但只有在存储大字符串或 blob 时才会显着减少堆。”。 DirectBuffer 是什么意思?它是放在java堆中的吗?你能提供相关信息的网站链接吗?
非常感谢!
【问题讨论】: