AWS導入(2)

こんな感じjsonをいい感じのテーブルにしてあげたい。

DynamoDBのまとめ

DynamoDB自体触るの初めてなので、NoSQLだよーとは聞くもののわからないこと多いので記録

このサイトから抜粋

大事な点としては

  • KV(Key value方式)
  •  JOINはできない!
    • 要はRDBMSから完全な移管は不可
  •  昔は正規化ガンガンしていたが、そんなことはしない。実務ベースでどのキーで検索を書けるかが超重要
    • テーブル定義時にINDEXを設定。そのキーの変更はできない
    • INDEXをキー以外の検索は最悪全探索なので効率が悪い
      • ただし、Global/Local secondary Indexっていう「繋がりINDEX」を指定することでレコード間のつながりを表現できる(グラフっぽい?)
        • Global/loccalの違いは利用方法の違い。繋がり名から検索するか、繋がり名を中間のキーとして検索するか
  • 要は検索が得意ではない 
    • HASHとSORTで成立して、HASHは分散検索用で、SORTは分散時の並び順(検索に相当)
      •  PK(partition key )=HASH
  • トランザクションというのはない
    • 速さ重視なので状況次第で可用性(A: 常にRWができる)と整合性(C: 読み込み結果が正しい)がおざなり。(と推測)
      •  分断体制(P)は保証
      • RDBMSはトランザクションあるんで関連テーブルとかを全チェックしちゃうので、オーバーヘッド大きい&速度遅い
  • その代わり、INDEX以外の項目を身勝手に追加できる
    • これがRDBとは違うスキーマレスの考え方
      • 身勝手に追加できるので、細かい項目決まってないPJとかにはいいかも
    • 逆にスキーマレスなので、正規化いらないでしょ?的な思考らしい
      • AWSガイド上でも頑張れば1つのテーブルでいくことがベストプラクティスとのこと

テーブルつくる

コンソール上でもできるが、CFnに入れたいのでjsonでかく。というかローカルでなんとかしたい
紆余曲折を経て、こうなりました。

参考にしたとこ

ポイント

  • feed_datetimeという名称に変更しました。これはdynamodbのreservedワードだったからww
    • 予約語を項目名にしてるとでちゃう(自分はクエリ叩いたときに気づいた)
  • attribbute definition はindexとなりうるものたち。つまり、ここに書くキー全てがはHASHかRANGEのどちらかに定義されている必要あり。その定義はkeyschemaかGlobal/Local SIに書く。
  • キーの中身はString(S), Numeric(N), BInary(B)を指定
    • 詳細はAWSみてね
  • Provisioningは必須
  • 他の項目(上で言うところの身勝手に追加できる項目)はINDEXではないので、ここにかかなくていい
  • ↑の定義はjsonで書いているよ。–cli-input-yamlはない。(あるって書いてあるけど…わからない)
  • ここに書いてある定義の変更は不可
    • ただしGSLは行ける。R/W CUも行ける。

最初は、全部ask1とか突っ込むかと思ったけど違った。認識甘かった

突っ込んで、確認します。

*Accessは関係ないです。

 

テストデータを入れます。JSONっぽくいれます。

単一項目get

クエリっぽくいけます

テスト終わったので消します

ブラウザでチェック

いまendpointをlocalhost:8080にしているので、

をお手待ちのブラウザで開くといい感じの画面出る。↑で叩いたようなクエリをJSで書いて叩けば帰ってくる。

AWS上に作りたい

そうですね作りたいですね。
まだなので、メモ程度にリンクはります

リンク

 

参考


AWS

Posted by tanico.rikudo