为什么每次调用 nodetool flush 时,Cassandra 都会创建一个单独的 .db 文件?

Why Cassandra creates a separate .db file every time nodetool flush is called?

我正在学习 Cassandra 3.x。我创建了一个键空间,一个 table 然后我将它写入磁盘使用:
nodetool flush

这会在其他文件中创建一个 mc-1-big-Data.db 文件。 好像每次用nodetool flush写磁盘,都会新建一个文件?这效率如何?不是说我查询数据的时候,可能要经过多个文件才能得到结果吗?

每个**Data.db文件实际上是一个SSTable文件。 Cassandra 将其数据存储在多个 SSTTable 中。当 cassandra 正在处理写入时,它会将其写入内存中的 SortStrings Table(SSTable=db 文件)并定期或在 nodetool 刷新时将它们刷新到磁盘。每次刷新都会在磁盘上创建一个新的 SSTable 并且内存 SSTable 被清除。

它不会去更新现有的 SSTable 文件。 有关每个列族的文件的更多信息 (https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlHowDataWritten.html)

稍后在压缩过程中,根据合并策略合并这些 SSTable 中的一个或多个,以减少 SSTable 文件的数量。

所有这些通常都是由大多数大数据系统完成的,这些系统支持以低延迟进行非常高的写入,而且因为在大数据系统的情况下就地编辑文件是禁止的(因为它们将数据存储在磁盘上的文件中)。

Hbase 有 Hfiles,Elasticsearch/Lucene 有 ES 段文件,例如