我对cassandra memtable有一些疑问。我很感激你的帮助。
关于memtable的事实:
1)放入RAM;
2)per-ColumnFamily结构;
3)单个列族可能存在多个memtable;
问题:
1)何时创建列族的附加记忆?需要什么条件?我假设在创建其他提交日志文件后会创建其他memtables。这是真的吗?
2)达到提交日志大小阈值后会发生什么?我假设将开始将memtables放入队列;队列填充后将开始将memtable刷新到sstable,然后删除旧的提交日志(在hdd上)和相应的memtable s (在ram中)。在这种情况下,memtable内存的某些部分将一直为空,并且提交日志总是会被填充到90-100%?
3)达到记忆大小阈值时会发生什么?像以前的情况一样会开始冲到sstable吗?提交日志的某些部分也将一直为空,可记忆的内存将被填充到90-100%?
4)关于memtable_allocation_type: 在官方资源中 - “offheap_buffers将单元名称和值移动到DirectBuffer对象。这对读取的影响最小 - 值仍然是”实时“Java缓冲区 - 但只有在存储大字符串或blob时才会显着减少堆。“。 DirectBuffer是什么意思?它放在java堆中?你能给出有关它的信息的网站链接吗?
非常感谢你!答案 0 :(得分:8)
我建议你观看https://academy.datastax.com/courses/learning-cassandra-write-path