HBaseモードのケーススタディリストデータ

プラットフォームを共有していただきありがとうございます-http://bjbsair.com/2020-04-10/tech-info/53341.html

以下は、ユーザーdist-listのかなり一般的な問題に関する通信です。ApacheHBaseで各ユーザーリストデータを処理する方法。

問題:

私たちは大量の(ユーザーごとの)リストデータをHBaseに格納する方法を研究しており、どのアクセスモードが最も理にかなっているのかを把握しようとしています。1つのオプションは、ほとんどのデータをキーに格納することです。これにより、次のようになります。

HBaseモードのケーススタディ:データのリスト

私たちの他のオプションは、以下を完全に使用することです:

HBaseモードのケーススタディ:データのリスト

各行には複数の値が含まれます。したがって、ある場合では、最初の30個の値を読み取ると次のようになります。

HBaseモードのケーススタディ:データのリスト

2番目のケースでは、次のようになります。

HBaseモードのケーススタディ:データのリスト

一般的な使用パターンは、これらのリストの最初の30個の値のみを読み取ることであり、リストに深く入る訪問はほとんどありません。一部のユーザーはこれらのリストに合計30の値を持ち、一部のユーザーは数百万(つまり、べき乗分布)を持ちます。

単一値形式はHBaseでより多くのスペースを占めるようですが、検索/ページ付けの柔軟性がいくらか改善されます。フェッチおよびスキャンされたページによってページ付けできるパフォーマンス上の重要な利点はありますか?

私が最初に理解したのは、ページサイズが不明な場合(およびキャッシュ設定が適切な場合)、スキャンの実行は高速になるはずですが、常に同じページサイズが必要な場合は、スキャン速度が高速になるはずです。パフォーマンスについて反対の人が言うのを聞いたことがあります。ページサイズは比較的一定であると想定しているため、ほとんどの使用例では、ページ長が固定された1ページのデータのみが必要であることを保証できます。また、頻繁に更新することはありませんが、これらのリストの中央に挿入される可能性があることを想定します(つまり、後続のすべての行を更新する必要があります)。

回答:

私が正しく理解していれば、トリプレットを "user、valueid、value"の形式で格納しようとすることになりますよね?たとえば、次のとおりです。

HBaseモードのケーススタディ:データのリスト

(ただし、ユーザー名は固定幅で、値IDは固定幅です)。

さらに、アクセスモードは次の要件を満たしています。「ユーザーXの場合、valueid Yで始まる次の30個の値をリストする」。正しいですか?これらの値をvalueidでソートして返す必要がありますか?

tlおよびdrバージョンでは、ユーザー+値ごとに行を追加する必要があると思われます。必要が確かでない限り、複雑な行内ページングソリューションを自分で構築しないでください。

2つのオプションは、HBaseモードを設計するときによくある質問を反映しています。「高さ」または「幅」を選択する必要がありますか?最初のパターンは「背が高い」です:各行はユーザーの値を表すため、各ユーザーのテーブルには多くの行があります。行キーはuser + valueidであり、(おそらく)単一の列の制限があります「値」を意味する記号。これは、行キーを押してソート順で行をスキャンする場合に適しています。任意のユーザー+ valueidでスキャンを開始し、次の30を読み取って終了できます。あきらめているのは、ユーザーのすべての行にトランザクションの保証を提供する機能ですが、必要なようには聞こえません。

2番目のオプションは「ワイド」です。一連の値を1行に格納するには、別の修飾子(修飾子はvalueid)を使用します。単純なアプローチは、ユーザーのすべての値を1行に格納することです。単一の行に何百万もの列を格納するとパフォーマンスに影響を与えると考えているため、「ページ分割」バージョンにジャンプしたと思います。単一のリクエストであまり多くのことを実行したくない場合、または行内のすべてのセルをスキャンして返すなど、いくつかのことはまったく悪いことではありません。クライアントには、特定の列のフラグメントを取得できるメソッドがあります。

これらの場合はどちらも基本的に多くのディスク容量を使用しないことに注意してください。識別情報の一部を左(行キー、オプション1)または右(オプション2)に「移動」するだけです。列修飾子内)。カバーの下で、各キー/値は依然として行キーと列名全体を格納します。

お気づきのように、手動ページネーションバージョンは、各ページのコンテンツの量を追跡する必要がある、新しい値が挿入された場合に再編成するなど、非常に複雑です。これははるかに複雑に見えます。非常に高いスループットでは、速度に若干の利点(または欠点)が生じる可能性があります。これを実際に知る唯一の方法は、試すことです。作成して比較する時間がない場合は、最も簡単なオプション(各ユーザー+ valueid)から始めることをお勧めします。シンプルに始めて繰り返します

おすすめ

転載: blog.51cto.com/14744108/2486400