【发布时间】:2012-02-13 15:06:46
【问题描述】:
所以我正在研究 Cassandra 并试图了解架构,我正在阅读 wiki 中的以下页面: http://wiki.apache.org/cassandra/MemtableSSTable
所以,按照这里的工作流程,你发送一个更新你的表的请求,这个请求被写入一个 CommitLog,然后写入一个称为 Memtable 的内存表(可以从 Commitlog 重建,以防系统失败)。一旦 Memtable 达到一定大小,它会将整个 Memtable 刷新到磁盘上的 SSTable 中,该 SSTable 不能再被修改,只能在压缩期间合并。当您达到可配置数量的 SSTable 时,您会进行压缩,这基本上会合并结果以释放磁盘空间并创建一个新的和改进的最新 SSTable。如果我在这里理解任何错误,请纠正我。
现在我有几个关于压缩的问题。首先,这个手术有多贵?如果我在磁盘上有两个 SSTable 时要求进行压缩,这是否会令人望而却步,或者等到半夜使用量下降时我会得到更好的服务吗? 如果我有多个(但很小)SSTables 与有几个但非常大的 SSTables 相比,压缩会更好吗?有很多未压缩的 SSTable 会影响读取性能吗?并发如何处理这个问题:如果我从这些 SSTable 中读取数据,那么有人会执行插入操作,将新的 Memtable 刷新到磁盘,进而导致压缩?
您能提供的任何有关这方面的信息和经验都会很棒!
【问题讨论】: