HBaseを使用していたとき、バイト配列をStringやLongなどのタイプに変換するのに多くの時間を費やしました。HBaseが値を型付きの値ではなくバイト配列として格納するのはなぜですか?
2 に答える
「BigTableが保存するため、Hbaseはすべてをbyte []として保存する」というのは、実際には満足のいく答えではないと思います。私の2セント:
これにより、大騒ぎせずにあらゆる種類のデータを保存できます。たとえば、商品関連のデータ(ID、メーカー、国、価格など)をhbaseテーブルに保存する必要があるとします。これらの各パラメーターを保存するには、これらの各パラメーターの個々のデータ型を事前に処理する必要があります。これは間違いなくオーバーヘッドを追加します。また、RDBMSとは異なり、hbaseはテーブルの作成時にこれらすべてを要求しません。したがって、これらのパラメーターのデータ型が明日変更されたり、いくつかのパラメーターを(いくつかの新しいデータ型で)追加することにした場合でも、必要なのは、値をBytes.ToBytes()でラップして、テーブルにプッシュすることだけです。これにより、挿入が高速になります。
また、シリアル化されたbyte []形式で値を格納すると、同じ値をネイティブ形式で格納する場合と比較して、数バイト節約できる場合があります。そして、このマイナーな節約は、ビッグデータを扱うときに非常に重要になります。
簡単に言うと、Hbaseはこれを実行して、内部データ構造のオーバーヘッドを最小限に抑えながら、処理を高速化し、ストレージをより効率的にします。
HBaseはBigtableのクローンであり、それがBigtableが行うことです。Bigtableは通常、リレーショナルデータベースのようにきめ細かいデータを保存せず、シリアル化されたオブジェクト(通常はプロトコルバッファ)を保存します。
オブジェクトのシリアル化アプローチを使用するか、HBaseライブラリへのインターフェースを抽象化して、タイプを1か所でのみ変換できるようにすることができます。