質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

113閲覧

DynamoDBでトランザクションが衝突した場合の挙動について

masaGt

総合スコア0

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2024/10/20 21:22

データベース & DynamoDB 初学者です。

DynamoDB のトランザクションについて勉強中に、トランザクションと別トランザクションの衝突、もしくはトランザクションと PutItem などのリクエストの衝突が発生した際の挙動についての自分の理解が間違っていないか不安で質問させていただきました。

自分の理解

以下の形式で書かせていただきます

  • トランザクションの衝突のケース
    → その際の挙動に対する自分の理解

  • とある項目に対する PutItem、UpdateItem、または DeleteItem リクエストが、同じ項目を含む実行中のトランザクション (TransactWriteItems) と衝突した場合
    → DynamoDB のトランザクションはロックを取得しないため、トランザクション処理完了前に他の PutItem などのリクエストによって対象項目が更新される可能性がある。その場合、トランザクションは失敗する。

  • 同じ項目に対する TransactWriteItems 同士が衝突
    → どちらのトランザクションもロックを取得しないため、どちらのトランザクションも項目の操作はできる。先に処理が完了した方のトランザクションが成功し、後のトランザクションは失敗する

  • とある項目に対する PutItem、UpdateItem、または DeleteItem リクエストが、同じ項目を含む実行中のトランザクション (TransactGetItems) と衝突した場合
    → DynamoDB のトランザクションはロックを取得しないため、トランザクション処理完了前に他の PutItem などのリクエストによって対象項目が更新される可能性がある。その場合、トランザクションは失敗する

  • 同じ項目に対する TransactGetItems 同士が衝突した場合
    → 先に処理が完了した方のトランザクションが成功し、後のトランザクションは失敗する (?)

  • 同じ項目に対してトランザクションA (TransactGetItems) とトランザクションB (TransactWriteItems) と衝突した場合
    → 先に処理が完了した方のトランザクションが成功し、後のトランザクションは失敗する (?)

上記の理解のうち間違っているところがございましたらご指摘いただけますと幸いです。

調べたサイト

トランザクション競合の処理(公式ドキュメント)

New – Amazon DynamoDB Transactions

最後に

TeratilのようなQ&Aサイトに初めて質問をポストするので拙い文章で大変お手数をおかけいたします。DynamoDBのトランザクションについてご教示いただけますと大変幸いです。何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2024/10/21 07:45

DynamoDBの挙動についてそこまで詳しくないのであまり確かなことが言えなくて申し訳ないです。 こういう、マネージドサービスについての込み入った挙動を確認したいときはサポートに聞くか実際に試してみることをお勧めします。
masaGt

2024/10/22 00:46 編集

yu_1985 様 コメントありがとうございます。 自分のアカウントのサポートプランがベーシックプランの為サポートセンターに技術的な質問ができなかったので、実際に試してみようと思います。ご教示いただきありがとうございます。 また、今回のトランザクションの質問に重ねて質問してしまう形になってしまい大変恐縮なのですが、トランザクションの衝突をシミュレートするには複数の Lambda 関数で同じ実行時刻を指定して(EventBridgeの作成?) トランザクションやPutItemなどをリクエストするイメージなのですが合っていますでしょうか? まだ Lambda は学習していないのでトンチンカンな考えであったら申し訳ございません。
masaGt

2024/10/22 01:38

追記 yu_1985 様 トランザクション衝突のシミュレーションは特別 Lmbda でなくとも、同時にDynamoDBへhttpリクエストができるものであればなんでもいいことに気がつきました。 不勉強な質問で大変失礼いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問