0

DynamoDBにソーシャルサイトを構築し始めたところです。

ユーザーに関連するかなりの量のデータがあり、これをすべて1つのテーブルにまとめることを計画しています。例:

  • ユーザーID
  • 生年月日
  • 写真のURL
  • 詳細

など-潜在的に数百の属性が存在する可能性があります。

質問:

  • この量のデータを1つのテーブルに入れることに何か問題がありますか?
  • そのデータをクエリするにはどうすればよいですか(「この年齢、この色の髪、この場所、今回ログオンしたすべてのメンバー)のようなクエリを実行できますか?このすべてのデータがテーブルに含まれていると仮定しますか?
  • テーブルの内容が長く、上記のようにそのテーブルでクエリを実行している場合、読み取りIOのコストは高くなります-長期的にはテーブル内のエントリが多い可能性があります...

ありがとう

4

1 に答える 1

2

いいえ。この方法でDynamoDBにクエリを実行することはできません。クエリできるのは主キー(およびオプションで単一の範囲)のみです。DynamoDBでテーブルをスキャンすると、時間がかかり、コストがかかり、他のクエリがハングします。

属性の数が少ない場合は、これらの属性のインデックステーブルを簡単に作成できます。しかし、数が少ないと、複雑になりすぎます。

メインテーブル:

Primary Key (Type: Hash) - userid
Attributes - the rest of the attributes

「髪」のインデックステーブル:

Primary Key (Type: Hash and Range) - hair and userid

他の属性のインデックスを追加しているAmazonSimpleDBもチェックアウトできるため、必要に応じてそのようなクエリを実行できます。ただし、その規模と低遅延をサポートする機能には制限があります。

リアルタイムとレポートでは要件が異なるため、複数のデータストアとテーブルの組み合わせを検討することもできます。

  • 迅速なリアルタイムユーザールックアップのためのDynamoDB
  • 追加の属性フィルターおよびクエリ用のSimpleDB/RDBMS(MySQLまたはAmazon RDSとして)
  • リーダーボードまたはコホートとしてのカウンターおよびテーブル用のメモリDB(Redis、Casandraなど)
  • パターンと傾向を発見するために分析できるアクティビティログ
于 2012-12-22T00:08:19.610 に答える