アプリケーションの設計フェーズに直面していて、HBaseが適していると思われる場合は、HBaseのデータモデルとアーキテクチャーに合わせて行キーとスキーマを設計する必要があります正しいアプローチ。しかし、RDBMSのためにもともと設計されたデータベースをHBaseに移行するのが理にかなっていることがあります。
このアプローチが理にかなっている一般的なシナリオは、スケーラビリティの限界に達しているMySQLデータベースインスタンスです。 MySQLインスタンス( シャーディング、つまり )を水平にスケーリングするためのテクニックがありますが、MySQLは単にシャーディング用に設計されたものではないため、このプロセスは通常面倒で問題になります。
<!リレーショナルモデルからHBaseモデルへの移行は比較的新しい分野です。しかし、一定の確立された考え方のパターンが浮上しており、移行に近づくときに従うべき3つの重要な原則に合体しています。これらの原理は、非正規化、重複、999および999インテリジェントキー(DDI)である。非正規化: リレーショナルデータベースモデルは、a)正規化されたデータベーススキーマ、およびb)SQL操作に応答するためのテーブル間の結合に依存する。データベースの正規化は、データが更新され、取得されるときに、データの損失、冗長性、およびその他の異常を防ぐ技術です。 <!正規化されたデータベーススキーマに達するために専門家が従う多くのルールがあります(データベースの正規化は全体的な検討です)が、通常はより大きなテーブルをより小さなテーブルに分割して関係を定義することになりますそれらの間の。データベースの非正規化は正規化の逆です。より小さいより具体的なテーブルは、より大きなより一般的なテーブルに結合されます。 <! - 3 - > これは、HBaseに移行する際の共通のパターンです。なぜなら、テーブル間で結合が提供されず、コストのかかるディスク操作が必要なため結合が遅くなるからです。正規化によって得られた保護が無効であるため、アップデートおよび回復の異常に対する防御はHBaseクライアントアプリケーションの仕事です。 重複:
-
データベーススキーマを非正規化すると、複数のテーブルにまたがる高価な読み取り操作を避けることができるため、データの複製が終了する可能性があります。余分なストレージについては心配しないでください(当然の理由で)。 HBaseの自動スケーラビリティを利用することができます。ただし、クライアントアプリケーションはデータを複製するために余分な作業が必要になることを覚えておいてください。HBaseは、行間で行レベルでない原子操作(HBASE-5229 JIRAで説明されている例外を除く)表。 インテリジェントキー:
HBaseに格納されたデータは行キーで順序付けされ、行キーはシステムによって提供される唯一のネイティブインデックスであるため、行キーの注意深いインテリジェントなデザインが大きな違いを生み出す可能性があります。たとえば、行キーは、サービス指図番号とサービス指図を配置した顧客のID番号の組み合わせになります。この行キーの設計により、同じ表の同じ行キーを使用して、サービス指図に関連するデータを検索したり、顧客に関連するデータをルックアップしたりすることができます。この手法は、一部のクエリでは高速になり、コストのかかるテーブル結合を回避します。
これらの特定のパターンを明確にするために、顧客連絡先情報テーブルを作成し、典型的なサービス注文データベースのコンテキスト内に配置します。この図は、正規化されたサービスオーダーデータベーススキーマの外観を示しています。RDBMS正規化の規則に従って、サービスオーダーが閉じられ、おそらく削除されたときに顧客データが失われないように、サービスオーダーテーブルとは別にサンプルCustomer Contact Informationテーブルを設定します。 Productsテーブルに対しても同じアプローチをとってください。つまり、サービス注文とは独立して新しい製品を架空の会社データベースに追加することができます。
-
RDBMS結合操作に依存することにより、このスキーマは、特定の製品に対して開かれたサービス注文の数と、その製品が使用されている顧客のロケーションとを明らかにするクエリをサポートします。 それはすべて上質で素敵ですが、RDBMで使用するスキーマです。このスキーマをHBaseスキーマにどのように移行しますか?次の図は、可能なHBase方式(DDI設計パターンに従う方式)を示しています。
顧客連絡先情報テーブルは、以前に使用された外部キーの代わりに顧客名と連絡先情報を含めて非正規化されています。また、顧客連絡先情報テーブルをそのままにしてデータを複製します。サービス注文テーブルと顧客連絡先情報テーブルの結合は不要です。
-
さらに、製品番号と顧客番号とを組み合わせてサービス注文番号(例えば、A100 | 00001)を形成するインテリジェントな行キー設計が採用されている。このインテリジェントキーを使用すると、サービスオーダテーブルは、製品の不具合や現在製品の問題が発生している顧客に関する重要なレポートを提供できます。 これらすべてのクエリはすべて、アプリケーションの行レベルのアトミックな方法でHBaseによってサポートされます。 HBaseが行キーを注文し、それらを辞書順にソートすることを知っているので、アプリケーションはレポートのスキャンを発行するときにデータの局所性についてある程度推測することができます。
HBaseスキーマで表されるサービスオーダーデータベースは、比較的簡単な例ですが、HBaseがRDBMS世界と交差することがある場合があることを示しています(たとえば、すべてのA *シリーズ製品番号はすべて一緒に格納されます)。重要な価値を提供します。架空の会社がテラバイトまたはペタバイトのサービスコールデータを保存する場合、HBaseはコスト、信頼性、性能、および規模の点で大きな違いを生み出します。
サービスオーダHBaseスキーマは、いくつかの異なる方法で設計できます。確かに、設計はすべてサポートする必要のあるクエリに依存しますが、HBaseアーキテクチャとDDIデザインパターンを十分に理解している限り、リレーショナルデータベースを非常に強力なHBaseアプリケーションに移行して運用することができます。
この例では、HBaseクライアントAPIを利用するJavaアプリケーション、またはおそらくApache Thriftを使用する別の言語を使用してクエリを実行したと仮定しています。このアプリケーションモデルは要件をうまく適合させることができ、架空のサービス会社にとって便利なパフォーマンスとカスタマイズオプションを提供します。