1 つのアプローチは、ユーザー ID + サイト ID から複合行キーを作成することです。
特定のページに必要な数のログ エントリを維持するようにテーブルを設定し、データを毎回新しいバージョンとして保存します (必要に応じてタイムスタンプを手動で設定します)。
HBase は各セルのタイムスタンプを維持するため、アクセス時間用に個別の列は必要ありません。
したがって、次のような内容のテーブルがあります
Row Page
user1:site1 www.example.com/index.html@1234567890
www.example.com/somepage.html@123456800
www.example.com/someotherpage.html@123456900
www.example.com/index.html@123457123
user1:site2 blahblah
user2:site1 etc...
2 つのサンプル リクエストに対処するには:
すべてのユーザー行を見つけるには、userx:0 から userx+1:0 までスキャンを実行し (必ず maxVersion を設定してください)、各結果行からサイト ID を解析します。
特定のユーザー/サイトのすべてのページを取得するには、userx:sitex から userx:sitex+1 までスキャンします。最後に、get で maxVersions を設定できないことを確認したので、それはオプションではありません。
簡単に言えば、列ファミリーは一緒に保存したいデータのグループを表します...おそらく、それらからデータを同時に読み取ることがかなり頻繁にあるでしょう。列を別々のファミリに配置すると、データが別々に保存されるため、1 つの列のみが必要な場合は読み取りが速くなりますが、両方の列を取得するには 2 つの異なる場所を読み取る必要があります。
もちろん、他のニーズによっては、別のアプローチを取りたいと思うかもしれません。HBase の構造をよりよく理解するために、big table paper を読むことを強くお勧めします (bigtable に強く基づいているため)。
HBase の内部をよりよく理解するには、Lars George のブログも役立ちます。