DynamoDBわかんない!!!!!!!!!!!!!
1日くらいわかんないをひきずっていました。
仕事でみんな使ってるんで、そんな難しいものじゃないだろ、と思っていたんですが、すごくややこしいです。特にキーとインデックスの話がすんごくわかりにくいです。
今日はそんなDynamoDBのキー・インデックスについて話していきます。
Contents
DynamoDBとは
DynamoDBについてうまく説明できないので、公式ドキュメントを見てください。
DymanoDB
DynamoDBドキュメント
DynamoDBの主なキーとインデックス一覧
DynamoDBを使うために知っておく必要があるキーとインデックスは次のようになります。
プライマリーキーっぽいやつ
- パーティションキー(ハッシュキー)
- ソートキー(レンジキー)
セカンダリインデックス
- グローバルセカンダリインデックス
- ローカルセカンダリインデックス
キーとインデックスについてわかんないこと
- キーがたくさんありすぎ!!!
- なにがプライマリーキーなの? パーティションキーがプライマリーキーじゃない場合があるって何それ
- 「セカンダリインデックス」?? なにそれ。よくわかんないから後で考えようと思ったら、それなしじゃうまく動かないって何!!!!!!!!
- 「パーティションキー」? 「ハッシュキー」? え、2つが一緒ってどういう意味!!!!
とにかくいろんなことがわからんのです。
DynamoDBのデータの持ち方とは
このサイトでデータの持ち方がわかってはじめて、キーについて理解できました。
ありがとうございます!
要はDynamoDBは連想配列の形でデータを持ってるから、キーは一意にしなきゃいけないし、検索するにしてもキーでしか検索できないに決まってるよ、ってことですね。
※連想配列とは
- JSON形式のようなデータの持ち方 {name: 山田, hobby: ラーメン}
- JavaでいうMap
- Pythonでいうdict
- RubyでいうHash
説明するとDynamoDBではJSON形式ではないにしても次のようなデータを持っています。
{
”山の中株式会社“: {
”創業”: 2015,
”社長”: “小山猿助”
},
”海の中株式会社“: {
”創業”: 22,
”社長”: “水野舐蔵”
}
}
「山の中株式会社」「海の中株式会社」のようなキーごとにパーティションが作られていて、そのキーが「パーティションキー」、または「ハッシュキー」と呼ばれます。検索する時には、このキーを頼りにデータを見つけます。
パーティションを作る時にはキーが必要
→ パーティションキー、
使う時には、何かしらのハッシュ値が無いと一意に検索できない
→ ハッシュキー
とぼくは覚えてます。
またDynamoDBでは次のようなデータを持つこともできます。
{
”山の中株式会社”: {
”山田“: {
”年齢”: 32,
”趣味”: “ラーメン”
},
”田中“: {
”年齢”: 22,
”趣味”: “ギター”
}
},
”海の中役場”: {
”橋本“: {
”年齢”: 43,
”趣味”: “ランニング”
},
”鈴木“: {
”年齢”: 20,
”趣味”: “ダイビング”
}
}
}
このとき、「山の中株式会社」「海の中役場」という会社名でパーティションが作られ、そのパーティションの中に「山田」「田中」のようなデータが入るようになります。
このときに「山田」「田中」のようなデータにもキーを作ることができ、そのキーの名前を「ソートキー」、または「レンジキー」と呼びます。
パーティションの中で何かしらのソートを行うときのキー
→ ソートキー
検索する時にごそっと指定した値を取得する
→ レンジキー
とぼくは覚えています。
RDB(リレーショナルデータベース)ユーザが理解するには
RDBユーザにとっては次のことを覚えてもらえればスムーズだと思います。
- パーティションキー(ハッシュキー)だけあって、ソートキー(レンジキー)が無いとき、プライマリーキーはパーティションキー(ハッシュキー)になる
- パーティションキー(ハッシュキー)もあって、ソートキー(レンジキー)があるとき、プライマリーキーはパーティションキー(ハッシュキー)とソートキー(レンジキー)をセットにした複合キーになる
- SQLのWhere句に入れられるようなものは、基本的にはパーティションキー(ハッシュキー)とソートキー(レンジキー)だけ。
- パーティションキー(ハッシュキー)とソートキー(レンジキー)以外で検索したい場合はセカンダリインデックスの指定が必要になる。
まとめ
DynamoDBのキーは最初めっちゃめんどいです。
特にRDB出身者は迷うと思います。RDBをちょっと簡単にしたものって思ったら全然違うんで。
コメントを残す