HBase のドキュメントには、スキーマ定義時に列ファミリーを宣言することが記載されています。なぜだか分からない?列ファミリーは複数の列 (実行時に追加できる) を継承し、それらはストレージ ファイルにマップされることを知っています。しかし、実行時に cf を追加できない理由は何ですか?
1 に答える
列ファミリーは、テーブルのスキーマの一部です。オンラインスキーマ変更を使用して、実行時にそれらを追加できます。ただし、HBaseテーブルに新しい「列」を動的に作成できるように、それらを動的に追加することはありません。
列ファミリがスキーマの一部であり、スキーマの変更が必要になる理由は、列ファミリがディスクとメモリの両方にデータを格納する方法に大きな影響を与えるためです。各列ファミリーには、独自のHFileのセットと、RegionServerのメモリ内の独自のデータ構造のセットがあります。新しい列ファミリーを動的に作成したり、使用を開始したりするには、かなりの費用がかかります。
列ファミリーが必要になるのは、テーブルのさまざまな部分を異なる方法で構成する必要がある場合(たとえば、一部の列にTTLを設定し、他の列に有効期限が切れないようにする場合)、またはアクセスの局所性を制御する場合(一緒にアクセスするものの方が優れている必要がある)です。良好なパフォーマンスが必要な場合は、同じ列ファミリーに属します。これは、操作のコストが列ファミリーの数に比例して増加するためです)。したがって、これらの特殊な理由により、ファミリ内に通常の「列」を追加する方法で、実行時に新しい列ファミリを動的に追加することは意味がありません。