Movatterモバイル変換


[0]ホーム

URL:


はてなブックマークアプリ

サクサク読めて、
アプリ限定の機能も多数!

アプリで開く

はてなブックマーク

  • はてなブックマーク
  • テクノロジー
  • 「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン
  • Twitterでシェア
  • Facebookでシェア

気に入った記事をブックマーク

  • 気に入った記事を保存できます
    保存した記事の一覧は、はてなブックマークで確認・編集ができます
  • 記事を読んだ感想やメモを書き残せます
  • 非公開でブックマークすることもできます
適切な情報に変更

エントリーの編集

loading...

エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。

タイトルガイドライン

このページのオーナーなので以下のアクションを実行できます

タイトル、本文などの情報を
再取得することができます
コメントを非表示にできますコメント表示の設定

ブックマークしました

ここにツイート内容が記載されますhttps://b.hatena.ne.jp/URLはspanで囲んでください

Twitterで共有

ONにすると、次回以降このダイアログを飛ばしてTwitterに遷移します

502usersがブックマークコメント32

    ガイドラインをご確認の上、良識あるコメントにご協力ください

    0/0
    入力したタグを追加

    現在プライベートモードです設定を変更する

    おすすめタグタグについて

      よく使うタグ

        「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン

        ガイドラインをご確認の上、良識あるコメントにご協力ください

        0/0
        入力したタグを追加

        現在プライベートモードです設定を変更する

        おすすめタグタグについて

          よく使うタグ

            はてなブックマーク

            はてなブックマークで
            関心をシェアしよう

            みんなの興味と感想が集まることで
            新しい発見や、深堀りがもっと楽しく

            ユーザー登録

            アカウントをお持ちの方はログインページ

            記事へのコメント32

            • 注目コメント
            • 新着コメント
            letitride
            銀行の例だとupdateでロックとって、updateのsetで演算するかな。tx.Exec(`UPDATE balances SET balance = balance - ? WHERE user_id = ? and balance >= ?`, amount, userID, amount);でロストアップデートなしで安全に残高内で減算取引できる

              その他
              w1234567
              MySQL詳しくないから変なこと言ってるかもだけど、roomsテーブルのレコードを最初にSELECT FOR UPDATEしてロックかけるのじゃ駄目なの?

                その他
                perl-o-pal
                初学者もいるわけだから何度やってもいい話だと思う。//私程度だとやらかしてから初めてあっ、てなるからなあ。まあ、この手の排他をRDBMSのトランザクションでやろうとは思わないかな…?

                  その他
                  electrolite
                  また30年以上前の知識(分離レベル)が一周回って出てきた。批判するわけではなく学習としては有効だが、今だったらRDB外でシリアライズか、最低限API化してアプリに直接たたかせないようにするかな。てかNoSQLか。

                    その他
                    Eiichiro
                    5つめの方法として、入室処理後に人数チェックして、アウトなら、ロールバックなげて退室処理する方法もあるよ。

                      その他
                      oakbow
                      分離レベルの話でRDB使わずにnoSQLでやるって言ってる人はちょっと使い方間違ってる気がするんだけどな。自前ロックとか車輪の再発明だしRDB以上にデータ整合性と同時実行制御できないと思うんだけど。

                        その他
                        infobloga
                        解説としては分かりやすいけど、実務上はw1234567さんのコメントが的確。でも、久しぶりにこの話を読んで「こんな面倒なこと考えるなら、KVSで自前でロックするのが簡単で安全」って思った。

                          その他
                          shikiarai
                          チャットシステム程度を作るのにRDBMS使う必要があるのか。他の実装より高コストになってないか。って話もあるのだけれど、これはあくまで例かなということで。。

                            その他
                            ntmukai
                            デッドロック発生の流れが分かりやすい。

                            その他
                            yasuharu519
                            わかりやすい解説

                            その他
                            tettekete37564
                            “(入室人数取得クエリ” < この結果が 0 だったときにトランザクション張り直しリトライではダメなのか?

                            その他
                            ar1theworld98
                            “使用するDBがどのトランザクション分離レベルで稼働しているかはアプリケーション側のコードには現れにくいのにも関わらず、正確にそれらを把握しておかないとサービスに重要な影響を与える深刻なバグに繋がる可能

                            その他
                            rryu
                            アプリケーションレベルの排他制御をDBMSのロックを利用して実装するという発想が既にバグの元な感じがする。インデックス張っただけでバグるとか罠すぎる…

                            その他
                            lm0x
                            id:erectroliteさんのコメントの意味がわからない…

                              その他
                              lalupin4
                              RR が基本なんだっけ。

                                その他
                                ryunosinfx
                                高負荷時だとロックすら躊躇されるからトランザクション張れない・・・(コンピューティングパワーが足りないかテーブルの設計が間違ってるとも言う。)

                                  その他
                                  yukky2000
                                  張るのはコネクションじゃないのか

                                  その他
                                  a_bicky
                                  gap lock は排他ロックも共有ロックも共有ロック的に振る舞うの知らなかった…

                                  その他
                                  xlc
                                  トランザクションを「張る」って何ぞ?/ RDBとSQLは正規表現と同じようなプログラミングパラダイムであり、オブジェクト指向では代替できないのだが、それを理解されてないよね。

                                    その他
                                    oakbow
                                    oakbow分離レベルの話でRDB使わずにnoSQLでやるって言ってる人はちょっと使い方間違ってる気がするんだけどな。自前ロックとか車輪の再発明だしRDB以上にデータ整合性と同時実行制御できないと思うんだけど。

                                      2020/12/20リンク

                                      その他
                                      Lumin
                                      select for updateは1年生で習います、SIerなら

                                        その他
                                        buhoho
                                        ありがたい教え

                                          その他
                                          letitride
                                          letitride銀行の例だとupdateでロックとって、updateのsetで演算するかな。tx.Exec(`UPDATE balances SET balance = balance - ? WHERE user_id = ? and balance >= ?`, amount, userID, amount);でロストアップデートなしで安全に残高内で減算取引できる

                                            2020/12/20リンク

                                            その他
                                            perl-o-pal
                                            perl-o-pal初学者もいるわけだから何度やってもいい話だと思う。//私程度だとやらかしてから初めてあっ、てなるからなあ。まあ、この手の排他をRDBMSのトランザクションでやろうとは思わないかな…?

                                              2020/12/20リンク

                                              その他
                                              daishi_n
                                              ロック制御しているところは処理上のボトルネックにもなるので適切なトランザクションモードを選択するのがパフォーマンスの要なんだけどコード書く側のリテラシーに依存してるのが厄介さん

                                                その他
                                                KazuoLv1
                                                並列処理ならまずスレッドの勉強しておくべし

                                                  その他
                                                  robo_pitcher
                                                  エンタープライズシステムだと業務要件分析とトランザクションレベルの分析をきちんとしないと原因不明バグやパフォーマンス低下に苦しむ事になる

                                                    その他
                                                    Iridium
                                                    こういうシーケンシャルな問題を調査するのってタイミングが絡んでくるので難しくない?逐次実行するとかみたいなモードってないのかな

                                                      その他
                                                      infobloga
                                                      infobloga解説としては分かりやすいけど、実務上はw1234567さんのコメントが的確。でも、久しぶりにこの話を読んで「こんな面倒なこと考えるなら、KVSで自前でロックするのが簡単で安全」って思った。

                                                        2020/12/20リンク

                                                        その他
                                                        matsui
                                                        “MySQLやPostgreSQLに代表されるRDBMS”

                                                          その他
                                                          shikiarai
                                                          shikiaraiチャットシステム程度を作るのにRDBMS使う必要があるのか。他の実装より高コストになってないか。って話もあるのだけれど、これはあくまで例かなということで。。

                                                            2020/12/20リンク

                                                            その他
                                                            masayuki5160
                                                            今まで読んできた中で一番わかりやすい説明だった。

                                                              その他
                                                              electrolite
                                                              electroliteまた30年以上前の知識(分離レベル)が一周回って出てきた。批判するわけではなく学習としては有効だが、今だったらRDB外でシリアライズか、最低限API化してアプリに直接たたかせないようにするかな。てかNoSQLか。

                                                                2020/12/20リンク

                                                                その他
                                                                kamocyc
                                                                トランザクション分離レベルの話。確かにちゃんと考えないとまずいところ。

                                                                  その他
                                                                  harumomo2006
                                                                  緩いシステムではソシャゲ方式はわりと使える。被害が最小限になるようにデータ破損を前提に処理の順番を組み上げる=魔法石の効果発動を先にして魔法石が実際に消費されるのが最後

                                                                    その他
                                                                    areyoukicking
                                                                    この辺は考えたことある

                                                                      その他
                                                                      w1234567
                                                                      w1234567MySQL詳しくないから変なこと言ってるかもだけど、roomsテーブルのレコードを最初にSELECT FOR UPDATEしてロックかけるのじゃ駄目なの?

                                                                        2020/12/20リンク

                                                                        その他
                                                                        umai_bow
                                                                        “。”

                                                                          その他

                                                                          注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています

                                                                          リンクを埋め込む

                                                                          以下のコードをコピーしてサイトに埋め込むことができます

                                                                          プレビュー
                                                                          アプリのスクリーンショット
                                                                          いまの話題をアプリでチェック!
                                                                          • バナー広告なし
                                                                          • ミュート機能あり
                                                                          • ダークモード搭載
                                                                          アプリをダウンロード

                                                                          関連記事

                                                                            usersに達しました!

                                                                            さんが1番目にブックマークした記事「「トランザクショ...」が注目されています。

                                                                            気持ちをシェアしよう

                                                                            ツイートする

                                                                            「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン

                                                                            この記事は DeNA 20 新卒 Advent Calendar 2020 19日目の記事です。 はじめにMySQLやPostgreSQLに代表...この記事は DeNA 20 新卒 Advent Calendar 2020 19日目の記事です。 はじめにMySQLやPostgreSQLに代表されるRDBMSではトランザクションと呼ばれる仕組みが提供されています。多くのWebアプリケーションエンジニアはこのトランザクションを駆使してDBとやりとりをするロジックを組み立てることになります。 しかし不整合を起こしたくない処理があるからといって闇雲にトランザクションを張ったり、トランザクションが張られているからと安心してアプリケーション側で闇雲にロジックを組み立ててしまうと思わぬバグを生むことになってしまいます。 このエントリでは、「トランザクションを張っておけば大丈夫」という考え方は危険な場合もあるということを、ありがちな実装例を交えて紹介していきます。 並列に処理されるトランザクション そもそも、トランザクションは全て直列に処理されるわ

                                                                            ブックマークしたユーザー

                                                                            • knstkny2024/08/17knstkny
                                                                            • smihara2024/05/06smihara
                                                                            • tofu-kun2024/03/30tofu-kun
                                                                            • xmobile2023/12/20xmobile
                                                                            • JUN_NETWORKS2023/10/31JUN_NETWORKS
                                                                            • techtech05212023/05/05techtech0521
                                                                            • ntmukai2023/05/02ntmukai
                                                                            • yasuharu5192023/03/21yasuharu519
                                                                            • youko032023/03/10youko03
                                                                            • starneon35172023/03/07starneon3517
                                                                            • Chisei2023/01/10Chisei
                                                                            • knj29182022/11/05knj2918
                                                                            • emmeleia2022/10/11emmeleia
                                                                            • bootJP2022/08/14bootJP
                                                                            • nyamadori2022/07/13nyamadori
                                                                            • havanap2022/07/06havanap
                                                                            • uyi_02022/07/05uyi_0
                                                                            • pokoyakazan2022/07/05pokoyakazan
                                                                            すべてのユーザーの
                                                                            詳細を表示します

                                                                            ブックマークしたすべてのユーザー

                                                                            同じサイトの新着

                                                                            同じサイトの新着をもっと読む

                                                                            いま人気の記事

                                                                            いま人気の記事をもっと読む

                                                                            いま人気の記事 - テクノロジー

                                                                            いま人気の記事 - テクノロジーをもっと読む

                                                                            新着記事 - テクノロジー

                                                                            新着記事 - テクノロジーをもっと読む

                                                                            同時期にブックマークされた記事

                                                                              いま人気の記事 - 企業メディア

                                                                              企業メディアをもっと読む

                                                                              はてなブックマーク

                                                                              公式Twitter

                                                                              はてなのサービス

                                                                              • App Storeからダウンロード
                                                                              • Google Playで手に入れよう
                                                                              Copyright © 2005-2025Hatena. All Rights Reserved.
                                                                              設定を変更しましたx

                                                                              [8]ページ先頭

                                                                              ©2009-2025 Movatter.jp