2013-03-14 10 views
5

私はRDBMSの背景から来て、最近のHBaseを読み始めています。私はセカンダリインデックスが存在しないことを理解し、我々は次のように何かをしようとしないでください。情報のすべてが行キー自体を作成するために使用することができる場合、私は思っていたのHBase:行のキーサイズ

SELECT * FROM tbl_photo WHERE album_id = 1969 

たとえば、フォトシェアリングサービスプロバイダーの電子メールアドレスを持つユーザーがいます。ユーザーはアルバムを作成し(複数のアルバムを作成することができます)、写真をアップロードすることができます。別のユーザーが写真をコメントし、一部のユーザーがコメントの上/下に投票します。そのような投票を識別するための

キーはemail:album:ts:photo:ts:comment:ts:vote:tsのように見えることがあります。 このキーは意味がありますか?それは推奨より長いですか?これは意味をなさないんが、すべての情報があなたのキーである場合、あなたの列に何を格納しますように(ts stands timestamp

答えて

7

?そして、あなたはいつもクライアントアプリケーションの観点からそのキーを形成できるでしょうか? HBaseのスキーマデザインは非常に難しい話題です。余分な時間がある場合は、昨年のHBaseConからこのビデオを必ずご覧ください:HBase Schema Design by Ian Varley

は私に関する限り、HBaseの行のキーを設計するときに心に留めておくべき最も重要なことは、「私は私のデータを取得する方法は?」です。

(あなたの例のように)あなたが特定のアルバムから画像を取得したい場合は、なぜemail:albumのような行キー何かを作ると異なる列の家族があなたの写真、コメントを、保管したりしないで...

このようにして特定の画像を取得するには、すべてのアルバムをスキャンする必要があります。ですから、これを防ぐために代わりにemail:pictureをキーとして使うことができますが、これは同じ問題を別の方法で作成するだけです。またemail:album:pictureを使用することができますが、特定のアルバムからのすべての画像を取得したい場合、あなたは画像の識別子を知っている必要がありますか、あなたのキー(複数可)を形成することができません。例えば、ユーザ缶はわずか2000枚の写真を持っている場合一方

は、キーとしてemail:picture又はemail:albumを用いてalbum又はpictureの列のフィルタを指定すると、2000行の最大を通してがHBaseの意志ループ問題になることはありませんそれはそれほど長くはかかりません。あなたはFuzzyRowFilterを使用してセカンダリインデックスのいくつかの種類を実装することができます使用しているのHBaseのバージョンに応じて、言われていること

関連する問題