AWS UnityからDynamoDBの更新
あいさつ
どうも、はかせです。
前回DynamoDBの読み込みができたので
今回はDynamoDBの更新をやってみます。
やり方
PythonなどでDynamoDBを更新しようとすると
update_itemとかを使うのでUnityでもそうかと思ったんですが違いました。
UnityでDynamoDBに対してできる操作は
・保存
・読込
・削除
この三つだけです。
よくデータベース処理で存在する更新や挿入がありませんね。
ではUnityではどうやってやるのか。
答えは極めて単純で読込→上書き保存です。
まずはコードから行きましょう。
Context.LoadAsync<TestTable>(hashKey: test.action, (res) => { if (res.Exception == null) { var temp = res.Result; temp.infos.Add("Hakase"); Context.SaveAsync<TestTable>(temp, (res2) => { if(res2.Exception == null) { print("Update"); } }); } else { print(res.Exception); } });
LoadAsyncは前回読込で使いました。
hakase0274.hatenablog.com
SaveAsyncは初出ですが、
実は最初のサンプルを動かしたときに使っています。
名前の通り渡されたものを保存するのですが、
この保存処理が場合によって変わります。
場合というのは保存しようとしたデータに設定された
プライマリキーの値の有無です。
無→挿入
有→更新
という動きになります。
なのでAWSSDKのUnity版にはUpdateやInsert処理が無いわけですね。
さて実行結果を見てみましょうか。
まずは実行前
Startという値をキーとして
ActionとStartという文字列が格納されています。
これを先述のコードで更新してみます。
無事HAKASEという文字列が追加されました。
そして何やら表示が変わっていますね。
確認してみたところ元々List型で保存されていたのが
更新処理をかけたあとでStringSetという型に変わっていました。
要素の前にあった型を示す文字が消えて見やすいですね。
それぞれのデータ型の詳しい説明は公式のリファレンスをどうぞ
docs.aws.amazon.com
リファレンスを見る限りListの方が便利っぽいですが、
そんな巨大かつ、型が入り乱れたデータを一つのスキーマで扱う気はないので
見やすいセット型の方が個人的には好きですね。