55

私はAmazonのDynamoDBを見ています。これは、データベースサーバーの保守とスケーリングの面倒な作業をすべて取り除いているように見えるからです。私は現在MySQLを使用していますが、データベースの保守とスケーリングは完全な頭痛の種です。

ドキュメントを確認しましたが、データを簡単に取得できるようにデータを構造化する方法に頭を悩ませることに苦労しています。

私はNoSQLと非リレーショナルデータベースにまったく慣れていません。

Dynamoのドキュメントから、プライマリハッシュキーと、限られた数の比較演算子を使用したプライマリ範囲キーでのみテーブルをクエリできるようです。

または、全表スキャンを実行して、それにフィルターを適用することもできます。キャッチは、一度に1Mbしかスキャンしないため、X個の結果を見つけるためにスキャンを繰り返す必要がある可能性が高いということです。

これらの制限により、予測可能なパフォーマンスを提供できることはわかっていますが、データを取り出すのが非常に難しいようです。また、全表スキャンを実行することは、実際には非効率的であり、テーブルが大きくなるにつれて効率が低下するだけのようです

たとえば、Flickrのクローンがあるとします。MyImagesテーブルは次のようになります。

  • 画像ID(番号、プライマリハッシュキー)
  • 追加された日付(番号、プライマリ範囲キー)
  • ユーザーID(文字列)
  • タグ(文字列セット)

したがって、クエリを使用すると、過去7日間のすべての画像を一覧表示し、結果をX個に制限するのが非常に簡単になります。

ただし、特定のユーザーのすべての画像を一覧表示する場合は、全表スキャンを実行し、ユーザー名でフィルター処理する必要があります。タグについても同じことが言えます。

また、一度にスキャンできるのは1Mbのみであるため、X個の画像を見つけるために複数のスキャンを実行する必要がある場合があります。また、X枚の画像で簡単に停止する方法もわかりません。30枚の画像を取得しようとしている場合、最初のスキャンで5枚、2回目のスキャンで40枚になる可能性があります。

私はこの権利を持っていますか?それは基本的にトレードオフですか?実質的にメンテナンスフリーで、非常に高速で予測可能なデータベースパフォーマンスが得られます。しかし、トレードオフは、結果を処理するためにはるかに多くのロジックを構築する必要があるということですか?

それとも私はここで完全にベースから外れていますか?

4

3 に答える 3

20

はい、パフォーマンスとクエリの柔軟性の間のトレードオフについては正しいです。

しかし、痛みを軽減するためのいくつかのトリックがあります-セカンダリインデックス/非正規化がおそらく最も重要です。

たとえば、ユーザーIDをキーにした別のテーブルがあり、すべての画像が一覧表示されます。画像を追加するときは、このテーブルを更新するだけでなく、画像IDでキー設定されたテーブルに行を追加します。

必要なクエリを決定してから、それらを中心にデータモデルを設計する必要があります。

于 2012-02-03T22:42:36.400 に答える
6

別のテーブルを使用して、独自のセカンダリインデックスを作成する必要があると思います。

このテーブル「スキーマ」は次のようになります。

    User ID (String, Primary Key)
    Date Added (Number, Range Key)
    Image ID (Number)

-

そうすれば、ユーザーIDでクエリを実行し、日付でフィルタリングすることもできます

于 2012-02-03T17:19:58.623 に答える
5

複合ハッシュ範囲キーをプライマリインデックスとして使用できます。

DynamoDBページから:

主キーは、単一属性のハッシュキーまたは複合ハッシュ範囲キーのいずれかです。単一の属性ハッシュ主キーは、たとえば「UserID」である可能性があります。これにより、特定のユーザーIDに関連付けられたアイテムのデータをすばやく読み書きできます。

複合ハッシュ範囲キーは、ハッシュキー要素と範囲キー要素としてインデックス付けされます。このマルチパートキーは、最初の要素値と2番目の要素値の間の階層を維持します。たとえば、複合ハッシュ範囲キーは、「UserID」(ハッシュ)と「Timestamp」(範囲)の組み合わせである可能性があります。ハッシュキー要素を一定に保つと、範囲キー要素全体を検索してアイテムを取得できます。これにより、Query APIを使用して、たとえば、タイムスタンプの範囲全体で単一のUserIDのすべてのアイテムを取得できます。

于 2013-04-19T04:34:55.063 に答える