4

私は HBase について読んだり勉強したりして、スキーマを作成しようとしていました。私は RDBMS 出身で、nosql db を試すのはこれが初めてです。スキーマ設計について簡単な質問があります。

3 つのテーブルがあるとします => アルバム、写真、コメント

  • アルバム <= ユーザーが作成

  • 写真 <= アルバムにアップロードされたすべての写真が含まれます

  • コメント <= アルバムまたは写真のコメントを含む

    すべてのコメントを含む写真を取得する必要があります。コメントではなく、すべての写真を含むアルバムを取得する必要があります。

ユーザーはメールで識別されます。私が思いついたスキーマ:

tbl_user

email || info: {password : ..., name : ...}

アルバム

<email>:album:<timestamp> || info {title:..., cover: photo-row-key}

写真

<album-row-key>:<timestamp> || info {caption:..., exif: ...}

コメント

<album-row-key or photo-row-key> || comments {
    comment:<timestamp>: {user: <email>, text:...}
    comment:<timestamp>: {user: <email>, text:...}
    comment:<timestamp>: {user: <email>, text:...}
    ...
}
  • このデザインは大丈夫ですか?行うべき/行う必要がある変更とその理由を知りたいだけです。
  • photo-row-key の先頭に album-row-key を付けるべきではありませんか (スペースを節約するためかもしれません)。
  • コメントのテーブルに関して、コメントの行キーは次のように作成する必要があり<album-row-key or photo-row-key>:comment:<timestamp>ますか? 上記のスキーマに従って、ユーザーがコメントを作成するたびに、コメント列を読み取り、新しいコメントで更新し、行を tha で更新する必要があります。いい音しますか?

RDBMSにより適したスキーマの例がある/あるリンクを共有できれば、非常に役立ちます:)

4

1 に答える 1

3

代替方法の 1 つは、コメントと写真とアルバムを同じテーブルに配置することです。また、写真と写真のコメントを 1 つの列ファミリーに配置し、アルバムのコメントを別の列ファミリーに配置します。

  • アルバムの行にキーがあります email:album:0:0:timestamp 写真の行にキーがあります
  • email:album:photo:0:timestamp 写真コメント 行キー
  • email:album:photo:comment:timestamp アルバムコメント行キー
  • メール:アルバム:コメント:タイムスタンプ

その後、必要に応じて 1 回のアクセスでデータを取得できます。例えば。:

  • プレフィックスによる 1 回のスキャンで、すべての写真とすべてのコメントを含むアルバムが作成されます
  • プレフィックスと最後のキーで 1 回スキャンすると、すべての写真を含むアルバムが表示されますが、コメントは表示されません
  • 電子メールで 1 回スキャンする: 2 番目のカラム ファミリーのアルバムは、すべてのコメントを含むアルバムを提供します。
  • email:album:photo プレフィックスで 1 回スキャンすると、すべてのコメント付きの写真が得られます
  • 電子メールによる 1 回のスキャン: すべての列ファミリーを含むアルバムで、すべてのデータが得られます
  • endkey by album.max を使用して電子メールでスキャン: ユーザーのすべてのアルバムを提供します。
于 2013-03-12T19:47:39.787 に答える