ビジネスの発展により、mysql を使用してインデックスを作成し、検索を行うと、たとえば、テーブル全体がダンプされるたびにデータ フローのボトルネックが発生します。過度の圧力がかかり、消費が発生します。現在のデータ量は基本的に 1 億レベルに達しています。mysql でより良いサービスを提供したい場合は、これに基づいてサブデータベースとテーブルを検討する必要があります。 hbase は mysql よりもデータ量がはるかに多く、カラムの拡張も非常に便利なので、データの保存に使用されます
mysql、sqlserver、oracleなどのリレーショナルデータベースでは、下図のようにデータは行単位で保存されます。
しかし、hbaseではすべてのデータは行単位で保存されます。
hbase の論理モデルは次のとおりです:
その内: com.cnn.ww は、mysql の主キーの概念に相当する rowkey に対応します。
コンテンツ、アンカー: この 2 つは、物理ストレージの観点からは、同じ列ファミリーのデータが同じファイル
cnnsi.com、mylook.ca に格納されます。 hbase では、列ファミリーの下で列を次のように指定できます。動的に追加される
対応するグリッド データはユニット データ、つまり対応する行キーを表します。cf: 列の下の特定の値
ここで、tn: はタイムスタンプ、異なるバージョンを表します。
そのうちの1つが格納されるユニットデータの構造は次のとおりです:
CRUDはデータベースの最も基本的で一般的に使用される操作です。たとえば、テーブル作成ステートメントは mysql には適用されません。詳しくは、以下に示すように、hbase シェルで 'table'、'columnfamily' を作成します
という名前のテーブルを作成できます。は columnfamily であり、その他のブロックサイズとバージョン データはデフォルトです
read データを取得するとき、対応するデータは、get 'table'、'row'、'cf:column' などの hbase ステートメントを通じて取得できます。 、hbase には対応する更新の概念はありませんが、新しいバージョンがタイムスタンプから反映されます。 使用するステートメントは
put 'table'、'row'、'cf: name'、'value' です。
value の値を対応する cf 列ファミリーに割り当てます
mysql でのデータの削除の違いは、行を直接削除するか、hbase で特定の列を空に設定することだけです。特定の列を直接削除できます
(3) mysqlのインデックス
の違い hbaseではインデックスを作成したりクエリをフィルタリングしたりできますが、hbaseでは行キーに基づくクエリのみがサポートされており、これが最も高速です
リレーショナルデータベースは長い歴史がありますが、データ量が増大する例えばmysqlデータベースの場合、データ量が数億以上になると、クエリの効果は、最終的には主キーに従ってのみ実行されるか、徐々にサブデータベースおよびサブテーブル モデルに発展する可能性があります。データベースとサブテーブルは、運用、保守、使用に多くの手間をもたらします。そのため、hbase を使用してデータ量が劇的に増加するにつれて、nosql データベースの主キー開発 (nosql は SQL だけでなく) も徐々に開発され、拡張されました。例として nosql では、TB および PB データをサポートしており、列の拡張は特に柔軟です
実際、hbase は mysql サブデータベースの結果と見なすことができます唯一の違いは、mysql のサブデータベースとテーブルの分割がインデックスなどをサポートしていることですが、本でわかるように、hbase のデータは列に従って格納されます。データが大きすぎる場合は、以下に示すように行ごとに分割されます:
異なるリージョン 異なるマシンに配置され、最終的にマスターによって管理されます。これは分割と同等です。大量のデータを保存するための行と列
たとえば、mysql には、次のようなジョイントインデックスの状況があります。製品とカテゴリの対応付け 特定の製品のすべてのカテゴリを取得する必要があり、特定のカテゴリのすべての製品も取得したい場合は、mysql のジョイント インデックスを直接たどることで要件を満たすことができます。 hbase で rowkey に従ってのみクエリを実行できる場合はどうすればよいでしょうか? 関連するデータを読み取った後、次の 2 つの解決策が得られました。 1. hbase では、行の後に行を続けることができます。共通の列ファミリーがある限り、上記の状況では、以下に示すように、行キーによって分類された幅広いテーブルを構築できます
分類 ID、行キーとして
値は次のように格納されます削除するかどうか
上記の行キーは分類IDです。行からすべてのproduct_idを直接取得し、それを自分で削除するかどうかをフィルタリングできます
2. 上位テーブルの構築とはつまり、hbase は辞書順にソートされるため、それほど多くの列は必要なく、次の設計を実行できます
classification id_product id を rowkey として使用します
1から始まる行をスキャンしてすべてのデータを取得する限り
基本的に、上記の2つのメソッドはデータを保存するためのセカンダリインデックスを構築します