LoginSignup
31
33

More than 1 year has passed since last update.

DynamoDBをこうやって理解しよう

Posted at

DynamnDBって、RDB長くやっている人ほど、なんか理解できない、話はわかるけど腑に落ちない存在だったりしませんか?

自分はこうやってDynamoを理解しました。正確にあっているかは自分でもわからないです。なかなか、説明を読んでも腑に落ちない人向けの記事なので、正確に理解している方は読む必要なしでしす。

さて、DynamoDBでググると、以下のようなイメージで書かれていることが多いと思います。

・DBにはカラムを定義する
・その中の特殊なカラムとしてパーティションキーとソートキーなるものが存在する。
・この二つを組み合わせてプライマリキーとする。パーティションキーだけでもプライマリーキーとして使用可能
・通常のSQLは使えない
・プライマリーキーでレコードを特定する

通常のRDBを長くやっていると、まずこの言葉遣いで混乱するし、全然イメージが沸かない。個人的にはプライマリキーという言葉は使わない方がいいとさえ思う。

自分が人にDynamoの説明をするときには、あえて以下のような説明を行います。

・DBと言いつつ、限りなくハードディスクのようなもの、Cドライブとか
・パーティションキーというのは、ディスク直下のフォルダだと思って
・ソートキーというのはその中に入っているファイル名

つまりDB内の1つのファイルを探すには、フォルダ名とファイル名の2つが決まればいい。逆に、この条件でしか調べられないからSQLは使用できない

まあ、誤解を覚悟の上で言えば、SQLは使えないけど、フォルダサーチはできて、かつ、その中のファイル一覧は持ってこれるという仕様なのです。(ソートも可能)

ソートキーがない場合は、パーティションキーだけでプライマリキーになるというのもこのあたりの仕様が理由です。

それと理解しておきたいのはDynamoに物理的なテーブル定義が存在しない点です。もちろんテーブル定義は作成できるけど、それはあくまで論理的なもので、こうやって使うぞ!と自主的に決めるテーブル定義となリます。

実際にAWSのDyanmoのコンソールを見れば、テーブル定義は作れないことがわかると思います。逆に好きなカラム名のデータを自由に入れることができる。

その中で唯一テーブル定義的な存在がパーティションキーとソートキー

もう少し、パーティションキーの説明をします。

パーティションキーの値によって、格納される物理DBは異なります。

??DBは1つじゃないの???

ここがDynamoDB理解の肝なのですが、使用されるレコードは1つの物理的なユニットに全部収められているのではなく、パーティションの値次第で物理的に別のDBに納められている模様

いや、実際にAMAZONの社内で調べたわけではないけど、そうゆう話が流布されてます。

つまり、パーティションによって、物理的には別DBに入っているということです。

パーティションキーA は 物理DB Xに入る
パーティションキーB は 物理DB Zに入る

みたいです(実際には物理DBというより物理ディスクといったほうがいいのかもしれないです。実際に見たことはないけど複数のマシンであるとは思う)

このようなDB分割方法を水平Shardと言うらしいです。データの中の特定のカラム(パーティションキー )の値によって格納するDBを分散させようという考え方。

これによって大量のデータを分散処理することは可能になりますが、RDBの利点が失われます。SQLが使えないとかね。

なのでShard万能ではなくて、むしろ使える局面が限られます。

おそらくDynamoDB使って会計システム作る人はいないです。

ざっくり理解するための記事ですので、この辺りで終わりにしますが、詳細はこのあたりとか読んでみると良いかもしれません。
https://www.alexdebrie.com/posts/dynamodb-partitions/

31
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
33