[フレーム]
はてなブックマークアプリ

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

アプリで開く

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

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

エントリーの編集

loading...

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

タイトルガイドライン

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

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

ブックマークしました

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

Twitterで共有

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

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

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

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

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

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

よく使うタグ

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

503 users zenn.dev/tockn

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

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
w1234567 MySQL詳しくないから変なこと言ってるかもだけど、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月17日 knstkny
  • smihara2024年05月06日 smihara
  • tofu-kun2024年03月30日 tofu-kun
  • xmobile2023年12月20日 xmobile
  • JUN_NETWORKS2023年10月31日 JUN_NETWORKS
  • techtech05212023年05月05日 techtech0521
  • ntmukai2023年05月02日 ntmukai
  • yasuharu5192023年03月21日 yasuharu519
  • youko032023年03月10日 youko03
  • starneon35172023年03月07日 starneon3517
  • Chisei2023年01月10日 Chisei
  • knj29182022年11月05日 knj2918
  • emmeleia2022年10月11日 emmeleia
  • bootJP2022年08月14日 bootJP
  • nyamadori2022年07月13日 nyamadori
  • havanap2022年07月06日 havanap
  • uyi_02022年07月05日 uyi_0
  • pokoyakazan2022年07月05日 pokoyakazan
すべてのユーザーの
詳細を表示します

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

同じサイトの新着

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

いま人気の記事

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

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

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

新着記事 - テクノロジー

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

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

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

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

はてなブックマーク

公式Twitter

はてなのサービス

Copyright © 2005-2025 Hatena. All Rights Reserved.
設定を変更しましたx

AltStyle によって変換されたページ (->オリジナル) /