テーブル設計を理解する
列指向(カラムナ)ストレージ

他のリレーショナルデータベースと同様に、StarRocks のテーブルは行と列で構成されています。各行はユーザーデータのレコードを保持し、各列のデータは同じ型を持ちます。テーブル内のすべての行は同じ数の列を持ちます。テーブルに列を動的に追加したり、削除したりすることができます。テーブルの列は、ディメンション列とメトリック列に分類できます。ディメンション列はキー列とも呼ばれ、メトリック列は値列とも呼ばれます。ディメンション列の値はデータのグループ化やソートに使用され、メトリック列の値は sum、count、min、max、hll_union_agg、bitmap_union などの関数を使用して累積することができます。
StarRocks はテーブルに列指向(カラムナ)ストレージを使用します。物理的には、列のデータはデータブロックに分割され、エンコード、圧縮されてからディスクに永続的に保存されます。論理的には、列のデータは同じデータ型の要素で構成される配列に例えることができます。行に保持される列の値は、それぞれの配列で列順に要素としてリストされます。つまり、行に保持される列の値は同じ配列インデックスを持ちます。配列インデックスは暗黙的であり、保存する必要はありません。テーブル内のすべての行は、1つ以上のディメンション列で指定された順序でソートされます。ソートされたテーブル内の行の位置は、その行のシーケンス番号で表されます。
テーブルに対するクエリでは、特定のディメンション列に対して等価または範囲条件を指定する場合、StarRocks はバイナリ検索を実行して、ソートされたデータの中から関心のある行を迅速に特定できます。例えば、table1 という名前のテーブルからデータをクエリしたい場合、このテーブルは event_day、siteid、citycode、username の4つの列で構成されており、そのうち event_day と siteid はディメンション列です。クエリ条件として event_day = 2020-09-18 と siteid = 2 を指定すると、StarRocks はバイナリ検索を実行し、指定された範囲内のデータのみを処理する必要があります。これは、event_day と siteid がディメンション列のプレフィックスを構成できるためです。クエリ条件として citycode = 4 と username = Andy を指定すると、StarRocks はバイナリ検索を実行できず、テーブル全体のデータを処理する必要があります。これは、citycode と username がディメンション列のプレフィックスを構成できないためです。