- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在研究 Cassandra 并试图了解其架构,并且我正在阅读 wiki 中的以下页面: http://wiki.apache.org/cassandra/MemtableSSTable
因此,为了遵循这里的工作流程,您发送一个更新表的请求,该请求被写入 CommitLog,然后写入称为 Memtable 的内存表(如果系统出现问题,可以从 Commitlog 重建该表)失败)。一旦 Memtable 达到一定大小,它会将整个 Memtable 刷新到磁盘上的 SSTable,该 SSTable 无法再修改,只能在压缩期间合并。当您达到可配置数量的 SSTable 时,您将进行压缩,这基本上会合并结果,释放磁盘空间并创建一个新的和改进的最新 SSTable。如果我理解有任何错误,请纠正我。
现在我有一些关于压缩的问题。首先,这个手术的费用是多少?如果每当光盘上有两个 SSTable 时我就要求进行压缩,这是否会令人望而却步,或者等到半夜使用量下降时我会得到更好的服务吗?如果我有多个(但很小)SSTable 与有几个但非常大的 SSTable 相比,压缩会更好吗?拥有大量未压缩的 SSTable 是否会影响读取性能?并发如何处理:如果我正在从这些 SSTable 中读取数据,然后有人执行插入操作,将新的 Memtable 刷新到磁盘,进而导致压缩,该怎么办?
您可以提供有关此的任何信息和经验,那就太好了!
最佳答案
尝试回答每个问题:
Firstly, how expensive is this operation?
压缩必须复制它正在压缩的 SSTable 中的所有内容(减去来自逻辑删除或覆盖的任何消灭)。然而,这比一开始看起来要便宜,因为压缩使用纯粹的顺序 IO,这在旋转磁盘上又好又快。
If I demanded a compaction whenever we have two SSTables on disc, would this be prohibitive, or would I be better served waiting until the middle of the night when usage is down?
这意味着您的写入成本将显着增加;假设每次写入都会导致一个新的 SSTable;因此,每次写入都必须压缩之前的所有写入。编写 N 个项目的成本将为 N^2。
一个更好的想法是采用类似于 Acunu 的倍增数组所使用的压缩策略:将每个 SSTable(又名数组)存储在一个“级别”中,并在一个级别中有两个数组时压缩它们,将输出数组提升为下一级。这可以证明每次写入分摊为 O((log N)/B) 顺序 IO,同时将数组数量限制为 O(log N)。
该方案在Cassandra 的(开源)存储引擎CaSTLe 中实现。欲了解更多信息,请参见此处:
注意,我为 Acunu 工作
Is compaction any better if I have multiple (but small) SSTables vs having a few but very large SSTables?
使用较小的 SSTable 进行压缩将花费更少的时间,但您必须执行更多操作。确实,这是以马换类(class)。然而,SSTable 的数量和大小确实会影响读取性能(请参阅下一个问题)
Does having a lot of non-compacted SSTables affect read performance?
对于点读取,不是很多:Cassandra(和 CaSTLe)具有布隆过滤器,以避免在知道键不存在时查找 SSTables,并且可以在找到正确的值时提前终止(通过使用时间戳)关于值和 SSTables)。
但是,使用 get_slice 查询时,您无法提前终止,因此您必须访问行中可能包含值的每个 SSTable - 因此,如果您有很多查询,您的 get_slices 将会变慢。
对于 get_range_slices 来说情况更糟,你不能使用布隆过滤器,并且每次调用都必须访问每个 SSTable。这些调用的性能将与您拥有的 SSTable 数量成反比。
更重要的是,对于数千个 SSTable,布隆过滤器误报率 (~1%) 将开始受到影响,因为每次查找时,您都必须在 10 个不包含该值的 SSTable 中查找!
How does concurrency work with this: what if I'm reading from these SSTables, then someone does an insert which flushes a new Memtable to disk, which in turn causes a compaction?
在 Cassandra 中,一旦内存中不再有对 SSTable 的引用(由垃圾收集器决定),SSTable 就会从磁盘中删除。所以读取不需要担心,旧的 SSTable 会被懒惰地清除。
谢谢
汤姆
关于nosql - Cassandra SSTable 和压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8917882/
nodetool cfstats 显示以下输出: Read Count: 746287 Read Latency: 8.772114064696291 ms. Write Count: 135629
有没有办法控制 SSTable 的最大大小,例如 100 MB,这样当 CF 的数据实际超过 100MB 时,Cassandra 会创建下一个 SSTable? 最佳答案 不幸的是,答案并不是那么简单
在 BigTable/GFS 和 Cassandra 术语中,SSTable 的定义是什么? 最佳答案 排序字符串表(借自google)是一个键/值字符串对的文件,按键排序 关于computer-sc
所以我正在研究 Cassandra 并试图了解其架构,并且我正在阅读 wiki 中的以下页面: http://wiki.apache.org/cassandra/MemtableSSTable 因此,
我试图更好地理解 Cassandra 中 sstables 的不变性。当数据存在于 memtable 中时,在插入操作或更新/删除操作中会发生什么非常清楚。但是不清楚当我想修改已经被刷新的数据时会发生
使用自制软件安装 cassandra12 后,它会退出并显示以下消息: java.lang.RuntimeException: Can't open incompatible SSTable! Cur
我们使用的是 cassandra 2.0.17,我们有一个包含 50% 选择、40% 更新和 10% 插入(无删除)的表。 为了对此类表具有较高的读取性能,我们发现建议使用 LeveledCompac
我已经意识到一些 sstables 不会被丢弃,即使它们只包含墓碑。 使用手动主要压缩这些 sstables 被删除。 也许它需要将 unchecked_tombstone_compaction 与
在 Cassandra 2.x 中,当我删除一列或多列时,它们会在 Memtable 中收到一个逻辑删除,但数据不会被删除。在某个时刻,Memtable 会刷新到 SSTable,其中包括已删除的数据
我正在尝试使用 sstable2json 实用程序将 sstables 转换为 json。它工作正常,但对于计数器列,它给出了一个非常长的字符串值。 我的建表语句:创建表计数器1 (值计数器, 名称变
根据我在 cassandra 中的理解 当客户端将数据写入单个服务器时,它会写入提交日志(仅追加日志而没有随机搜索)。然后将数据放入驻留在内存中的 MEMTable 中。然后确认写入成功。当 MEMT
根据: http://www.datastax.com/docs/1.0/ddl/column_family#about-column-family-compression RDBMS 看到压缩导致性
阅读 nodetool 标记的问题后编辑。 我们每天拍摄我们的单节点 cassandra 数据库的快照。如果我想在该节点上或在运行不同 cassandra 实例的临时服务器上恢复快照,我的理解是我必须
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
我最近开始使用 Cassandra 数据库。我已经在本地机器中安装了单节点集群。我正在使用 Cassandra 1.2.3。 我在互联网上阅读这篇文章,发现了这一行- Cassandra writes
当使用 LeveledCompactionStrategy 时,sstables 被组织在“级别”中。是否可以查看文件属于哪个级别? 背景:我有一堆我最终会压实的墓碑。我很好奇这些墓碑到底有多少层。
在我运行之后:- sudo service cassandra start 然后是 sudo service cassandra status 我得到一个无法访问 Cassandra 的 pidfil
我是Cassandra等nosql数据库的新手,目前看到这个二级索引和sstable附加二级索引。有些我对在 Cassandra 中使用二级索引的目的感到困惑,关系数据库和带二级索引的 Cassand
使用两个数据库来说明这个例子:CouchDB和 Cassandra . CouchDB CouchDB 使用 B+ 树作为文档索引(使用 a clever modification 在其仅附加环境中工
我在哪里可以找到有关哪个版本的 Cassandra 支持哪个版本的 SSTables 的更多信息。 最近我注意到 DSE Cassandra 正在生成 SSTables bti ,而 Apache C
我是一名优秀的程序员,十分优秀!