タグ

トランザクションに関するatm_09_tdのブックマーク (32)

  • 本当にtransactionは必要なのか? - 急がば回れ、選ぶなら近道

    前提 前提ですが。 transaction=Consistency/Isolationを担保する仕組みの話とする。 一般にtransactionが持つべき属性はACIDと言われる。C/Iに比べて、A/Dが“わかりやすい”のでAtomic/Durableの属性の方が人口に膾炙しているが、現在のtransactionではA/Dネタはあまり話題にならない。A/Dネタはローカルだけで見るのであれば普通にfile system /storageの話になる。元来Atomic/Durableはtransactionのコンテクストでは専らlogging / recoveryの話だった。そして、これは非同期のepoch-basedになるとそれ自体の取り扱い優先度が下がる。現代的なtransactionでは、「現時点ではread committedが保証されているFS/storageでA/Dの問題は(ある程度

    本当にtransactionは必要なのか? - 急がば回れ、選ぶなら近道
  • 決済システムの残高管理周りの DB 設計と戦略 - カンムテックブログ

    エンジニアの佐野です。今日はカンムの決済システムでユーザの残高管理をどうやっているかについて書きます。 カンムの製品であるバンドルカードはプリペイド方式のカードです。ユーザによる入金、店舗での利用、運営事由の操作などによりユーザの残高が増減します。このような残高の管理について単純に考えると user_id と balance と updated_at あたりをもったテーブルを用意して balance と updated_at を更新していく方法があるかもしれません。しかしながらカンムでは残高を管理するテーブルを持たず、これらイベントの履歴のみで残高を管理しています。以下、記事ではこれらユーザの残高が増減するイベントのことをトランザクションと呼びます。ここでは DB の Transaction Processing を意味しません。 記事のポイントは 残高を管理をするテーブルは作らず、ト

    決済システムの残高管理周りの DB 設計と戦略 - カンムテックブログ
  • 「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン

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

    「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン
  • MySQLでSELECT FOR UPDATEと行ロックの挙動を検証してみた - Continue(s)

    どうも、今日も今日とて野毛で飲みながらブログを書いている@0kawaraです。 今日は、普段あまり意識してこなかったMySQLのInnoDBでのロックの振る舞いについて色々実験してみました。(もちろん、きっかは自分がドツボにはまったから) ちゃんと理解するためには「共有・排他的ロックとは」って話や、「行ロックってつまりインデックスレコードロックだよね」などの話とか理解する必要があるんですが、それは github.com をちゃんと一読してもらえれば十分かと思います。 (というか、これが問題なく読めて理解できる人はこの記事読む必要ない….) 以下は上のドキュメント含め関連する記事などを読んで自分でInnoDBの行ロック周りについて、というかSELECT FOR UPDATEについて理解を深めるために手元で実験したことのまとめです。 技術的にちゃんとした理解を深めたい人は最後にまとめた参考サイ

    MySQLでSELECT FOR UPDATEと行ロックの挙動を検証してみた - Continue(s)
  • 知っているとうれしいSAPトラブルシューティングツール&SAPサポート情報 | SAPジャパン ブログ

    © 2021. SAP SE or an SAP affiliate company. All rights reserved. 今日は、最近のお客様との会話で、特に反響の大きいSAPサポートのトピックをいくつかご紹介したいと思います。 1)知ってるとうれしいSAPトラブルシューティングツール ANST : Automated Note Search Tool 直面したエラーに対して、SAP Noteが自動提案されればどんなにいいだろう…。なんて思う事がありますよね。トランザクションコードANSTを利用すると、問題の起こったトランザクション、プログラムなどをANST上で実行し再現する事により、対応するSAP Noteを自動提案してくれます。 SAP NetWeaver 7.40以上では標準装備されており、それ以前のリリースでもSP適用により使えるようになります。ぜひ下記のSAP Suppo

    知っているとうれしいSAPトラブルシューティングツール&SAPサポート情報 | SAPジャパン ブログ
  • 分散ロックという名の過ち - Software Transactional Memo

     TL;DR; 「分散ロック」が分散システムの設計図に登場した時 だいたいその設計は間違っていて当に必要なものはトランザクションだ 並行システムを実装する際にロックを用いるのはとても自然なことだ。 僕も普段はロックフリー系のアルゴリズムに詳しいと言われがちだが知識量でいったら実はロック系の方が多く蓄えているかも知れない。 分散システムは並行システムであることが多いので、その中にロックが登場するのはとても自然な発想である。 よく「分散」「並行」「並列」の言葉の定義がごっちゃになっているケースがあり、この記事の主題にしたいわけではないので深くは言及しないが、分散システムは環境などの要因で突如として参加者が音信不通になったり復活したりする点で並行システムと大きく異なる。 並行システムと同じノリで分散システムを設計しようとした際に陥る頻出の過ちが「分散ロック」である。そのアイデアはとても簡単で

    分散ロックという名の過ち - Software Transactional Memo
  • [Spring] 宣言的トランザクションがネストした時はどうする!? REQUIRES_NEWを使ってみた | DevelopersIO

    [Spring] 宣言的トランザクションがネストした時はどうする!? REQUIRES_NEWを使ってみた はい、こんにちは、齋藤です。 どうしましょう。 今日は久しぶりに Springです。 今回の記事はSpringのトランザクションの管理方法について記事を書きます。 宣言的トランザクションについては、Transaction Managementや Qiitaに書かれてある記事 に大体のことは書かれていると思います。 宣言的トランザクションを使っている場合にこういう場合はどうしたら良いんだろう?というのを解決する方法について、ブログを書いていきます。 宣言的トランザクションがネストしている場合にどうするべきなのだろうか、という話で メソッド2つ書くか、少し明示的にトランザクションを管理するかなぁ、という結論になりました。 はじめに 皆さんは、どのようなコードを普段書かれているのか気になり

    [Spring] 宣言的トランザクションがネストした時はどうする!? REQUIRES_NEWを使ってみた | DevelopersIO
  • MySQL(innodb)の分離レベルごとのanomalyについて実験した - tom__bo’s Blog

    ※ この記事はMySQL Casual Advent Calendar 2017の11日目の記事です。 A critique of ANSI SQL isolation levelsを読んで(読んだブログ)、MySQL(innodb)で分離レベルごとのanomaly(不整合)の発生について実験しました。使ったのはDockerで立てられる 8.0.3-rc-log MySQL Community Sereverです。 ここでは上記の論文であげられているanomalyとid:kumagiさんのブログ(いろんなAnomaly)で知ったread only anomalyが起こるかを分離レベルごとに試してみます。 最初に、それぞれのanomalyについての簡単な説明とkumagiさんのブログで使っている書き方を真似た図、それに対応するプランを整理し、(実行経過は省略してw)結果だけ書きます。 ※ こ

    MySQL(innodb)の分離レベルごとのanomalyについて実験した - tom__bo’s Blog
  • SQLトランザクション分離 実践ガイド | POSTD

    (注:2017/10/16、いただいたフィードバックを元に翻訳を修正いたしました。) (注:2017/10/11、いただいたフィードバックを元に翻訳を修正いたしました。) データベースのドキュメントで分離レベルを目にして、軽く不安を感じつつ、あまり考えないようにしたことはないでしょうか。トランザクションの日常の使用例できちんと分離について言及しているものはほとんどありません。多くはデータベースの初期設定の分離レベルを利用しており、後は運頼みです。しかし、来、理解しておくべき基的なトピックであり、いくらか時間を投入してこのガイドの内容を学習すれば、もっと快適に作業できるようになるでしょう。 私はこの記事の情報を学術論文、PostgreSQLドキュメンテーションから集めました。分離レベルの 何たる かだけでなく、適用の正確さを保持しつつ最大速度で使うにはいつ使うべきか、という疑問に答えるべ

    SQLトランザクション分離 実践ガイド | POSTD
  • MySQLのSELECT .. FOR UPDATEはREPEATABLE-READでも直近にコミットされたレコードを返す

    MySQLのSELECT .. FOR UPDATEはREPEATABLE-READでも直近にコミットされたレコードを返す TL;DR トランザクション分離レベルがREPEATABLE-READの場合、SELECT .. FOR UPDATEやSELECT .. LOCK IN SHARE MODEとロックなしのSELECTの結果が違うことがある。 仕様らしい => 漢(オトコ)のコンピュータ道: InnoDBのREPEATABLE READにおけるLocking Readについての注意点

  • カーネギーメロンのデータベースの講義の資料・映像 - ablog

    前にも呟いたけどカーネギーメロンのデータベースの講義の資料・映像全部と紹介されてる論文読破すれば簡単に僕以上のトランザクションの専門家になれるしみんなもっと気軽に挑戦して欲しい。https://t.co/p9LXqTOFXKhttps://t.co/c8oRpXnNu0— くまぎ (@kumagi) 2017年3月24日 id:kumagi さんがステキなツイートをされてたのでメモ。 Schedule - CMU 15-721 :: Database Systems (Spring 2016) 要チェックやで。

    カーネギーメロンのデータベースの講義の資料・映像 - ablog
  • MySQLのトランザクション制御がキモい話 - なからなLife

    MySQL Casual Advent Calendar 2016 - Qiitaの5日目の記事です。 AdventCalendar自体初参加でドキドキ。 トランザクションの開始は、BEGINしたときじゃない! MySQLでは、BEGIN(START TRANSACTION。長いので、以下、特筆すべき場合以外は「BEGIN」で)を宣言しても、内部的にはまだトランザクションを開始してません。 SQLを投げたタイミングで、トランザクション開始になります。 このとき、更新のない、FOR UPDATEもないSELECT文でも、トランザクションが開始されます。 なにそれきもい。 「AutoCommit=ON/OFF」による違い AutoCommit=ONのとき トランザクションはSQLを発行するたびにBEGIN/COMMITで完了し、ロールバックできません。 複数SQLを束ねて1つのトランザクション

    MySQLのトランザクション制御がキモい話 - なからなLife
  • データベース12 - トランザクションと同時実行制御

    【非エンジニアが 「明日からDevRelやってよ」って 突然言われて1年半やってきたこと ~teratailのDevRel担当、ゼロからの奮闘記~ @a...Yusaku Kinoshita

    データベース12 - トランザクションと同時実行制御
  • Springでトランザクション管理 - Qiita

    バージョンはSpring4.2.X系 Springでのトランザクション管理 Springのトランザクション管理は大きく分けて以下の2つの管理方法が存在する。 1.プログラミングによるトランザクション管理 プログラミングによってトランザクションを手動管理する方法。以下のようなイメージでトランザクション制御コードをソースコード内に記述する。 transactionManager.begin(); transactionManager.commit(); transactionManager.rollback(); ソースコード内にトランザクション制御コードも入りこむため、見通しが悪くなったり制御を間違えるとバグの温床にもなったりするので、極力使うべきではない。 2.宣言的トランザクション管理 「あるメソッドを呼び出したときにトランザクションをかける」と宣言する方法。以下のようなイメージでメソッ

    Springでトランザクション管理 - Qiita
  • トランザクションの設計と進化

    2016年7月27日 Database Lounge Tokyoで話した内容。 タイトルは名ばかりでリカバリとIn-MemoryDBの話が主体Read less

    トランザクションの設計と進化
  • DBの自動連番がロールバックしても戻らない理由 - C Sharpens you up

    DBの主キーカラムに自動連番(MySQLならAUTO_INCREMENT、SQL ServerならIDENTITY、OracleやPostgreSQLならシーケンス)を設定していると、基的には連続した数字が付番されていくのですが、行削除もしていないのに抜け番が発生する場合があります。 INSERTが制約にひっかかって失敗した トランザクションをロールバックした などの場合です。 特にトランザクションのロールバックは、DB全体の変更をなかったことにするはずなのに連番だけは進んだまま戻らないということで、知らないと違和感があるものです。 連番が戻らない理由 PostgreSQLのドキュメントがこう説明しています。 同一のシーケンスから数値を取得する同時実行トランザクション同士のブロックを防止するため、nextval演算は決してロールバックされません。 http://www.postgresq

    DBの自動連番がロールバックしても戻らない理由 - C Sharpens you up
  • 嵐のコンサートがあるとダブルブッキングしてしまうホテル予約システムを作ってみた

    今年の5月1日に、仙台市内のホテルで多重予約のトラブルが発生したと報道されています。 部屋数203室の仙台市のビジネスホテルで、9月18~23日の宿泊予約を数千件受け付けるトラブルがあった。アイドルグループ「嵐」のライブが宮城県内で開催される期間だった。インターネットでの申し込みが殺到し、システム障害が起きたとみられるという。 トラブルがあったのは、仙台市泉区の「ホテルルートイン仙台泉インター」。ホテルなどによると、9月19、20、22、23日に宮城スタジアム(宮城県利府町)で嵐がライブを開くことが明らかになった後の5月1日午前5時ごろ、ネットを使った予約申し込みが殺到していることに気づいたという。 203室のホテルなのに「予約」数千件 嵐公演で殺到か:朝日新聞デジタル より引用 5月1日の朝に何があったのか調べてみると、この日の早朝にテレビや新聞でコンサートの情報が流れたようですね。 お

    嵐のコンサートがあるとダブルブッキングしてしまうホテル予約システムを作ってみた
  • The Java EE 7 TutorialのTransactionsの章をテキトーに訳した - kagamihogeの日記

    The Java EE 7 Tutorialの51 Transactionsの章をテキトーに訳した。 51 Transactions 一般的なエンタープライズアプリケーションは一つ以上のデータベースに情報の保存と取得を行います。この情報は業務に必須なものなので、情報には正確かつリアルタイム性と信頼性が求められます。データの整合性が低下する場合があり、複数のプログラムで同時に同じ情報を更新可能になっていたり、システムエラーが処理中のビジネストランザクションで影響を与えたデータを残したまま部分的にだけデータを更新したり、といった場合です。こうしたシナリオを防ぐために、ソフトウェアトランザクションはデータの整合性を保証します。トランザクションは複数のプログラムによるコンカレントなデータアクセスを制御します。システムエラーの際には、トランザクションはリカバリ後にデータが一貫性を保つことを保証します

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • 第2回 トランザクションを知ればデータベースがわかる―「データ復旧」「同時実行制御」を行う“不完全な”しくみ(1) | gihyo.jp

    開始コマンドがDBMSによってバラバラなのは、標準SQLで明確に決まっていないためです。中にはOracleDB2のように、データベースへ接続したら自動的にトランザクションが始まることになっているため、開始コマンドのないDBMSもあります。確かに、最初に暗黙に開始されれば、そのあとは終了文だけあれば区切りはわかる(終了文が次のトランザクションの開始文も兼ねる)ので、合理的といえば合理的です。 構造的な単位としてのトランザクション 一方でDBMSの側から見ると、トランザクションは2つの重要な機能に関係しています。それが、「⁠データの復旧」と「同時実行制御」です。まずは、前者から見ていきましょう。 トランザクションは復旧の単位 障害発生前に終了したトランザクション データベースに限らず、システムというのは使い続けていればどこかのタイミングで障害に見舞われます。なるべく障害に遭遇しない堅固なシス

    第2回 トランザクションを知ればデータベースがわかる―「データ復旧」「同時実行制御」を行う“不完全な”しくみ(1) | gihyo.jp