2016-04-29 9 views
1

次のユースケースとその理由について、DynamoDBテーブルを最適に設計する方法について、いくつかの洞察をお伝えしたいと思います。私はthe best practicesを読んだが、まだ十分理解していない。DynamoDBテーブルフォーマット

主に使用するのは、各ユーザーグループごとの週単位のエントリです。これらのエントリを、各ユーザグループの最新エントリでソートする必要があります。私はまた、簡単に(またはすばやく)各グループの最新のエントリを取得することができる必要があります。

記事を読む前の私の最初のアイデアは、グループごとに別々のテーブルを使用し、各エントリにユニークなパーティションキーとエポックから秒に変換された日付のソートキーがあることでした。しかし、この記事を読んだ後、このアプローチはパーティションの設計に違反しているように見える。

最近のエントリーは私のWebサーバーではかなり簡単にキャッシュすることができますが、とにかくそれがデザインに影響を与えるかどうか不思議です。

ガイダンスはありますか?

答えて

1

私の意見では、好ましいの表のデザインは、次のようになります。

  • ユーザーグループこれは、任意のパーティション違反ではありません

としてソートキーパーティションキー

  • タイムスタンプとしてなぜなら、パーティションとソートキーに基づくプライマリキーを持つテーブルでは、同じパーティションキーを複数のアイテムに使用することができるからですさまざまなソートキー。このようにして、タイムスタンプソートされたユーザグループエントリを簡単にクエリできます。最新のエントリを取得します。

    プロビジョニングされたスループットを最大限に活用するには、パーティションキー値に均等に分散されたデータがであるように注意する必要があります。 20個のパーティションがあり、1つまたは2つのパーティションにのみアクセスすると、パフォーマンスが大幅に低下します。

    ただし、各パーティションに毎週エントリが追加される場合は、上記の設計がうまく機能します。

  • +0

    驚くばかりです。昨夜、それを眠った後も同じ考えが頭に浮かんだ。スループットに関するアドバイスをありがとう。私はそれほど考慮しなかった。 – ProdigousRanger

    +0

    これは効率的にはカバーしません(つまり、スキャンまたはマルチクエリなし)。「各グループの最新のエントリを簡単に(またはすばやく)取得できる必要もあります。 –

    +0

    はい、あります。 'ScanIndexForward = false'(降順)と' Limit = 1'のクエリは、ユーザグループの最新のエントリを返します。私はより良い方法があるとは思わない。 – birnbaum