2012/05/02

Javaプログラマ的なDynamoDBの捉え方

予測可能なパフォーマンスを、メンテナンスフリーで手に入れられるAmazon DynamoDB。非常に魅力的ではありますが、DynamoDBは徹底的にKey-Valueな考えが必要になります。というか、主キー以外でのルックアップは基本的に実行できないと考えた方が良いです。特にPrimary Keyの扱いが重要なので、ちょっとまとめみました。

DynamoDBのPrimary Keyには「Hash Type Primary Key」と、「Hash and Range Type Primary Key」の二種類があります。詳しい解説は他のサイトにまかせるとして、これらをJavaプログラマ的に捉えると下記のようになります。

Hash Type Primary Key

Map<HashKey,Object>
Hash Type Primary Keyを使用する場合には、本当に純粋なMapとして捉えられます。HashKeyが適切に分散さえしていれば、DynamoDBのすばらしい性能の恩恵を受けることができます。

Hash and Range Type Primary Key

Map<HashKey, SortedMap<RangeKey,Object>>
Hash and Range Type Primary Keyを使用する場合にも、Hash Keyの役割は変わりません。ただ、これに加えて、ソートされたRange Keyを用いることができます。Range Keyはソートされているだけでなく、Queryという機能を用いて柔軟にアクセスできます。ただし、Range Keyだけでは十分な分散は実現できません。

Primary Keyを用いないアクセス

Primary Keyを用いない場合には、Scanという機能で総当たり処理が可能です。ただ、Scanは主キーを無視した完全な総当たり処理であり、原則として実運用に用いるべきものではないと考えます。Primary Key以外で検索を行う必要がある場合には、別のTableをインデックスとして作成するか、DynamoDB以外と組み合わせることを検討した方が良いと思います。

Use it well

DynamoDBは強い癖がありますが、うまく使えば非常に強力な道具になります。エンジニアの腕の見せ所ですね。

0 件のコメント:

コメントを投稿