私は HFiles についてかなり基本的な疑問を持っていました。
put/insert リクエストが開始されると、値は最初に WAL に書き込まれ、次に memstore に書き込まれます。memstore の値は、HFile と同じソート方法で格納されます。memstore がいっぱいになると、新しい HFile にフラッシュされます。
ここで、HFile がデータをソートされた順序で格納することを読みました。つまり、連続した行キーは互いに隣り合っています。
これは 100% 本当ですか?
例: 最初に、行キー 500 を除いて、行キー 1 から 1000 までの行を書き込みます。memstore がいっぱいになったので、HFile1 という名前の新しい HFile を作成するとします。現在、このファイルは不変です。
ここで、行 1001 から 2000 を書き込み、次に行キー 500 を書き込みます。memstore がいっぱいで、HFile に書き込むとします。これを HFile2 と呼びます。
では、こうなってしまうのでしょうか。
はいの場合、行キー 500 は HFile1 にないため、HFiles の行キーはソートされていません。では、太字の元の文は正しいですか?
では、読み取りが発生した場合、読み取りはどのように行われるのでしょうか?