首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记忆理解

记忆理解
EN

Stack Overflow用户
提问于 2015-03-11 09:37:04
回答 1查看 13.9K关注 0票数 6

我有一些关于卡桑德拉备忘录的问题。我会感谢你的帮助。

关于备忘录的事实:

1)放置在RAM中;

( 2)每柱科结构;

3)单列家族可能存在多个备忘录;

问题:

( 1)何时为列族创建附加的memtable?需要什么条件?我假设在创建额外的提交日志文件之后会创建额外的备忘录。这是真的吗?

2)达到提交日志大小阈值后会发生什么?我假设这将开始将memtable放置到队列中;在队列填充之后,会开始将memtable刷新到sstable,然后删除旧的提交日志(在hdd上)和相应的memtable(在ram中)。在这种情况下,记忆内存的某些部分将永远是空的,而提交日志总是会被填充到90%-100%吗?

3)达到模件大小阈值时会发生什么情况?就像以前的案子一样,会开始脸红吗?提交日志的某些部分也将永远是空的,可记忆内存将被填满高达90%-100%?

4)关于memtable_allocation_type:在官方资源中-- "offheap_buffers将单元格名称和值移动到DirectBuffer对象。这对读取的影响最小--这些值仍然是“活动的”Java缓冲区,但只有在存储大型字符串或blobs时才能显著减少堆。“DirectBuffer是什么意思?它被放置在java堆中?你能给网站提供相关信息的链接吗?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-11 10:05:05

  1. 对于给定的列族,通常只有一个Memtable在内存中,除非在特殊情况下,如修复过程或挂起的刷新。
  2. 当提交日志已满时,会触发一次刷新: Memtable作为SSTable写入磁盘,然后清除Memtable并回收提交日志。一个新的循环从一个空的提交日志/Memtable开始
  3. 当Memtable超过给定大小时,就会像上面那样触发刷新。
  4. 默认情况下,Memtable通常保存在Java堆内存中。从Cassandra 2.1,Memtable可以存储在Java堆之外的角度来缓解GC压力。然而,这种设置是对某些特殊情况的优化。Cassandra可以使用JNA将数据存储在Java堆之外,这意味着该数据不符合垃圾收集的条件,因为它不为JVM所知。但是,必须对Java对象进行转换,以便在其中存储/检索。这就是为什么这些Java对象不被视为“活着”的原因。

我建议你看https://academy.datastax.com/courses/learning-cassandra-write-path

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28982925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档