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



我正在学习Cassandra 3.x。我创建一个密钥空间,一个表,然后使用以下方法将其写入磁盘:
nodetool flush

这会在其他文件中创建一个 mc-1-big-Data.db 文件。 似乎每次我使用 nodetool 刷新写入磁盘时,它都会创建一个新文件?这如何有效?这不意味着当我查询数据时,它可能需要通过多个文件才能获得结果吗?

每个**数据.db文件实际上都是一个SSTable文件。Cassandra将其数据存储在多个SSTTables中。当 cassandra 处理写入时,它会将其写入内存中的 SortString 表(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 Segment文件,例如

最新更新