userIdで識別されるユーザーによって生成されたイベントを保存する必要があります。各ユーザーは、companyIdで識別される会社に属しています。次のように、HBase のテーブルのデザインを考え出しました。
rowkey : < companyId >< userId ><タイムスタンプ>
column-family : info (以下に示すイベント属性のセットをカプセル化)
列: <属性1 >、<属性2 >....<属性>
このキーの設計により、部分的なキー スキャンを使用して、 companyIdやuserIdで後でデータのクエリを実行しやすくなることがわかっています。そうは言っても、いくつかの質問と懸念があり、いくつかのアイデアを得たいと思っていました。
1- 時間範囲を指定してすべてのデータを読み取る読み取りユース ケースがある場合、この現在の設計では、rowKey を使用できません。代わりに、フル スキャンを実行し、タイムスタンプ フィールドの行をフィルター処理する必要があります ( attr列の 1 つとして個別に保持されます)。
2-重複を処理する方法は? その場合、HBase が行の新しいバージョンを作成することはわかっていますが、1 で述べた読み取りユースケースに従って、後で読み取ることができますか? クエリを実行するときにバージョンを制御できることはわかっていますが、それは良い設計になるのでしょうか、それともネイティブ機能を誤ってオーバーロードするのでしょうか?
3- これは地域サーバーのホットスポットに関するものです。モノリシック キーはありませんが、特定の企業またはユーザーが非常にアクティブである場合、この問題に遭遇する可能性があります。この場合、サーバーの数に基づくハッシュとバケット化は機能しませんか? タイムスタンプ フィールドをハッシュして、それを元の値ではなく、rowKey に追加するとしたらどうでしょうか。しかし、問題は、キーのタイムスタンプ コンポーネントをスキャンできないことです。それをキャプチャするには、列に別の列 (attr) が必要です。助言がありますか?
提供できる情報 (コメント、リンク、本、アイデア) に感謝します。