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

时间:2018-07-02 23:32:41

标签: cassandra-3.0

我正在学习Cassandra3.x。创建一个键空间,一个表,然后使用以下命令将其写入磁盘:
 overflow-y: visible !important;

这将在其他文件中创建mc-1-big-Data.db文件。 似乎每次我使用nodetool flush向磁盘写入数据时,都会创建一个新文件吗?效率如何?并不是说我查询数据时可能必须遍历多个文件才能获得结果吗?

1 个答案:

答案 0 :(得分:1)

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

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

稍后,在压缩期间,将根据合并策略合并一个或多个SSTable,以减少SSTable文件的数量。

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

Hbase具有Hfile,Elasticsearch / Lucene具有ES Segment文件,例如。