Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
takezoe
24,927 views
そんなトランザクションマネージャで大丈夫か?
Software
◦
Read more
31
Save
Share
Embed
Embed presentation
Download
Downloaded 56 times
1
/ 37
2
/ 37
3
/ 37
4
/ 37
5
/ 37
6
/ 37
7
/ 37
8
/ 37
9
/ 37
10
/ 37
11
/ 37
12
/ 37
13
/ 37
14
/ 37
15
/ 37
16
/ 37
17
/ 37
18
/ 37
19
/ 37
20
/ 37
21
/ 37
22
/ 37
23
/ 37
24
/ 37
25
/ 37
26
/ 37
27
/ 37
28
/ 37
29
/ 37
30
/ 37
31
/ 37
32
/ 37
33
/ 37
34
/ 37
35
/ 37
36
/ 37
37
/ 37
More Related Content
PDF
BuildKitの概要と最近の機能
by
Kohei Tokunaga
PPTX
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
PDF
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
PDF
マルチテナントのアプリケーション実装〜実践編〜
by
Yoshiki Nakagawa
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
by
Amazon Web Services Japan
PDF
ビッグデータ処理データベースの全体像と使い分け
by
Recruit Technologies
PPTX
はじめてのElasticsearchクラスタ
by
Satoyuki Tsukano
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
by
NTT DATA Technology & Innovation
BuildKitの概要と最近の機能
by
Kohei Tokunaga
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
マルチテナントのアプリケーション実装〜実践編〜
by
Yoshiki Nakagawa
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
by
Amazon Web Services Japan
ビッグデータ処理データベースの全体像と使い分け
by
Recruit Technologies
はじめてのElasticsearchクラスタ
by
Satoyuki Tsukano
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
by
NTT DATA Technology & Innovation
What's hot
PDF
KafkaとAWS Kinesisの比較
by
Yoshiyasu SAEKI
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
by
Masahiko Sawada
PDF
MHA for MySQLとDeNAのオープンソースの話
by
Yoshinori Matsunobu
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
PPTX
AKS と ACI を組み合わせて使ってみた
by
Hideaki Aoyagi
PDF
AWSのログ管理ベストプラクティス
by
Akihiro Kuwano
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PDF
DockerとPodmanの比較
by
Akihiro Suda
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
by
NTT DATA Technology & Innovation
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
by
NTT DATA Technology & Innovation
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
PDF
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
by
日本マイクロソフト株式会社
PDF
Infrastructure as Code (IaC) 談義 2022
by
Amazon Web Services Japan
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
PDF
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
by
Amazon Web Services Japan
PDF
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
KafkaとAWS Kinesisの比較
by
Yoshiyasu SAEKI
アーキテクチャから理解するPostgreSQLのレプリケーション
by
Masahiko Sawada
MHA for MySQLとDeNAのオープンソースの話
by
Yoshinori Matsunobu
マイクロにしすぎた結果がこれだよ!
by
mosa siru
AKS と ACI を組み合わせて使ってみた
by
Hideaki Aoyagi
AWSのログ管理ベストプラクティス
by
Akihiro Kuwano
Redisの特徴と活用方法について
by
Yuji Otani
マイクロサービス 4つの分割アプローチ
by
増田 亨
DockerとPodmanの比較
by
Akihiro Suda
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
by
NTT DATA Technology & Innovation
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
by
NTT DATA Technology & Innovation
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
by
日本マイクロソフト株式会社
Infrastructure as Code (IaC) 談義 2022
by
Amazon Web Services Japan
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
by
Amazon Web Services Japan
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
Viewers also liked
PDF
small 画面でも、 BIG 画面でも、 今すぐ使えるレスポンシブ活用術
by
ourmaninjapan
PDF
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
by
Manabu Koga
PPTX
ゲームエンジニアのためのデータベース設計
by
sairoutine
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
PDF
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
by
Takahiro YAMAGUCHI
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
PDF
第2回関西ソーシャルゲーム勉強会
by
ha1t
ODP
HTML5概要、コードサンプル
by
ourmaninjapan
PDF
クラウド・SaaS型 統合基幹業務システム 「CAM MACS」を支える PostgreSQL ~雲に乗ったゾウ~
by
学 松崎
PDF
業務系WebアプリケーションがStrutsから旅立つ日
by
Mitsuru Ogawa
PPTX
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
by
Tokoroten Nakayama
PPTX
ソーシャルゲームにレコメンドエンジンを導入した話
by
Tokoroten Nakayama
PPTX
Serverspec at hbstudy #45
by
Gosuke Miyashita
PDF
Scala界隈の近況
by
takezoe
PDF
PG-REXで学ぶPacemaker運用の実例
by
kazuhcurry
KEY
実録!Railsのはまりポイント10選
by
Drecom Co., Ltd.
PDF
MySQL Index勉強会外部公開用
by
CROOZ, inc.
PDF
Doma SQLテンプレートのしくみ
by
Toshihiro Nakamura
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
by
Hironobu Suzuki
PPTX
My sqlで2億件のシリアルデータと格闘した話
by
saiken3110
small 画面でも、 BIG 画面でも、 今すぐ使えるレスポンシブ活用術
by
ourmaninjapan
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
by
Manabu Koga
ゲームエンジニアのためのデータベース設計
by
sairoutine
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
by
Takahiro YAMAGUCHI
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
第2回関西ソーシャルゲーム勉強会
by
ha1t
HTML5概要、コードサンプル
by
ourmaninjapan
クラウド・SaaS型 統合基幹業務システム 「CAM MACS」を支える PostgreSQL ~雲に乗ったゾウ~
by
学 松崎
業務系WebアプリケーションがStrutsから旅立つ日
by
Mitsuru Ogawa
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
by
Tokoroten Nakayama
ソーシャルゲームにレコメンドエンジンを導入した話
by
Tokoroten Nakayama
Serverspec at hbstudy #45
by
Gosuke Miyashita
Scala界隈の近況
by
takezoe
PG-REXで学ぶPacemaker運用の実例
by
kazuhcurry
実録!Railsのはまりポイント10選
by
Drecom Co., Ltd.
MySQL Index勉強会外部公開用
by
CROOZ, inc.
Doma SQLテンプレートのしくみ
by
Toshihiro Nakamura
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
by
Hironobu Suzuki
My sqlで2億件のシリアルデータと格闘した話
by
saiken3110
More from takezoe
PDF
Journey of Migrating Millions of Queries on The Cloud
by
takezoe
PDF
GitBucket: Open source self-hosting Git server built by Scala
by
takezoe
PDF
Testing Distributed Query Engine as a Service
by
takezoe
PDF
Revisit Dependency Injection in scala
by
takezoe
PDF
How to keep maintainability of long life Scala applications
by
takezoe
PDF
頑張りすぎないScala
by
takezoe
PDF
GitBucket: Git Centric Software Development Platform by Scala
by
takezoe
PDF
Non-Functional Programming in Scala
by
takezoe
PDF
Scala警察のすすめ
by
takezoe
PDF
Scala製機械学習サーバ「Apache PredictionIO」
by
takezoe
PDF
The best of AltJava is Xtend
by
takezoe
PDF
Scala Warrior and type-safe front-end development with Scala.js
by
takezoe
PDF
Tracing Microservices with Zipkin
by
takezoe
PDF
Type-safe front-end development with Scala
by
takezoe
PDF
Scala Frameworks for Web Application 2016
by
takezoe
PDF
Macro in Scala
by
takezoe
PDF
Java9 and Project Jigsaw
by
takezoe
PDF
Reactive database access with Slick3
by
takezoe
PDF
markedj: The best of markdown processor on JVM
by
takezoe
PDF
ネタじゃないScala.js
by
takezoe
Journey of Migrating Millions of Queries on The Cloud
by
takezoe
GitBucket: Open source self-hosting Git server built by Scala
by
takezoe
Testing Distributed Query Engine as a Service
by
takezoe
Revisit Dependency Injection in scala
by
takezoe
How to keep maintainability of long life Scala applications
by
takezoe
頑張りすぎないScala
by
takezoe
GitBucket: Git Centric Software Development Platform by Scala
by
takezoe
Non-Functional Programming in Scala
by
takezoe
Scala警察のすすめ
by
takezoe
Scala製機械学習サーバ「Apache PredictionIO」
by
takezoe
The best of AltJava is Xtend
by
takezoe
Scala Warrior and type-safe front-end development with Scala.js
by
takezoe
Tracing Microservices with Zipkin
by
takezoe
Type-safe front-end development with Scala
by
takezoe
Scala Frameworks for Web Application 2016
by
takezoe
Macro in Scala
by
takezoe
Java9 and Project Jigsaw
by
takezoe
Reactive database access with Slick3
by
takezoe
markedj: The best of markdown processor on JVM
by
takezoe
ネタじゃないScala.js
by
takezoe
そんなトランザクションマネージャで大丈夫か?
1.
そんなトランザクション マネージャで大丈夫か? @takezoen BizReach,Inc.
2.
JTA、使っていますよね? ● JavaEEサーバ ● Seasar2 ●
Spring Framework
3.
トランザクションマネージャの役割 ● 複数のリソースを1つのトランザクションで処理 する ● トランザクションに参加するリソースの整合性を 保証する
4.
たとえば... ● 複数のDBに対する処理 ● DBに対する処理とJMSによるメッセージ送信 DB
DB プログラム DB MQ プログラム 参照・更新 メッセージ 送信・受信参照・更新 参照・更新 1トランザクションで処理する
5.
以下のどちらかであることを保証する ● すべてのリソースがコミットされる ● すべてのリソースがロールバックされる
6.
どうやって保証しているのか?
7.
2フェーズコミット リソース1 リソース2 トランザクション マネージャ プログラム commit prepare? commit prepare? commit
8.
2フェーズコミット ● 全てのリソースがprepareに対してOKを返した 場合のみcommitする ● どれか1つでもprepareに対してNGを返した場 合は全てのリソースをrollbackする
9.
2フェーズコミット ● XADataSourceが必要 ● XADataSourceの実装はJDBCドライバによっ て提供される ●
非XAリソースをラップしてエミュレーションする 機能を持っている場合もある
10.
XAトランザクションのSQL(MySQLの場合) mysql> XA START
'xatest'; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO account VALUES(1, 'takezoe'); Query OK, 1 row affected (0.04 sec) mysql> XA END 'xatest'; Query OK, 0 rows affected (0.00 sec) mysql> XA PREPARE 'xatest'; Query OK, 0 rows affected (0.00 sec) mysql> XA COMMIT 'xatest'; Query OK, 0 rows affected (0.00 sec)
11.
様々な最適化 ● リソースが1つの場合は1フェーズでcommitする ● 最後のリソースはprepareせずにcommitする ●
非XAリソースでも1つだけならJTAトランザク ションに参加可能
12.
めでたしめでたし
13.
ちょっと待った!!
14.
ここからが本題です
15.
途中で落ちたらどうなるの?
16.
不整合が発生してしまう ● リソース側にトランザクションが残ってしまう ● 一部のリソースだけがコミットされた状態になっ てしまう
17.
リカバリマネージャ ● トランザクションマネージャはトランザクションの 状態をトランザクションログに出力している ● リカバリマネージャはトランザクションログを見て 不正なトランザクションを自動的にリカバリする
18.
リカバリマネージャ トランザクション マネージャ リカバリ マネージャ トランザクションログ トランザクション の状態を書き込み 残ってしまっている トランザクションがないか 定期的にチェック 残ってしまっている トランザクションを検出した 場合はリカバリを実行 誤検出しないよう、トランザクションマネー ジャの管理下になく、かつ一定時間ステー タスが変わっていないもの、というような チェックを行っている
19.
トランザクションのリカバリとは? ● リソース側に残っているトランザクションを rollbackまたはcommitのどちらかに倒す ● 基本的には安全サイド(rollback)に倒す ●
すでに1つでもリソースをcommitしてしまってい る場合は全部commitする
20.
どこで落ちたかでリカバリ方法が異なる リソース1 リソース2 トランザクション マネージャ プログラム commit prepare? commit prepare? commit ここで落ちた場合は両方 rollbackする ここで落ちた場合はリソー ス2をcommitする
21.
リカバリマネージャがあれば安心
22.
リカバリマネージャがあれば安心 ではありません
23.
リカバリマネージャではリカバリ できないケースがあります
24.
トランザクションログが壊れた場合ヽ(‘ ∇‘ )ノ ●
リソースに対する操作を行ってからトランザク ションログを書き込み前に死んだ場合 ● トランザクションログのファイル書き込み中に死 んだ場合
25.
リソース側に残ってしまった トランザクションを手動でcommitまたは rollbackする必要があります
26.
手動リカバリ(MySQLの場合) mysql> XA RECOVER; +----------+--------------+--------------+--------+ |
formatID | gtrid_length | bqual_length | data | +----------+--------------+--------------+--------+ | 1 | 6 | 0 | xatest | +----------+--------------+--------------+--------+ 1 row in set (0.00 sec) mysql> XA ROLLBACK 'xatest'; Query OK, 0 rows affected (0.00 sec) mysql> XA RECOVER; Empty set (0.00 sec) XAトランザクションが残ってしまって いる 他のリソースの状態をトランザクショ ンIDで突き合せてcommitするべき かrollbackするべきか判断し、トラン ザクションをリカバリする 残ってしまっていたXAトランザクショ ンが消えた
27.
めでたしめでたし
28.
ちょっと待った!!
29.
Seasar2やSpringを使っている場合
30.
Seasar2 ● トランザクションログを書いていない ● もちろん自動リカバリ機能もない
31.
Seasar2 ● なんちゃってXADataSource <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property
name="driverClassName">"oracle.jdbc.driver.OracleDriver"</property> <property name="URL">"jdbc:oracle:thin:@xxx:1521:yyy"</property> <property name="user">"aaa"</property> <property name="password">"bbb"</property> </component> Seasar2のサンプルなどにはこういった設定例が紹介されているが、これは Seasar2側で用意しているXADataSourceのなんちゃって実装で、通常の java. sql.ConnectionをラップしてXAの動作をエミュレートするもの。
32.
Seasar2 ● 2フェーズコミットを行うのであればJDBCドライバが提供し ているXADataSourceの実装を使うべき ○ com.mysql.jdbc.jdbc2.optional.MysqlXADataSource ○
org.postgresql.xa.PGXADataSource <component name="xaDataSource" class="org.postgresql.xa.PGXADataSource"> <property name="serverName">"localhost"</property> <property name="databaseName">"TEST"</property> <property name="user">"xxxx"</property> <property name="password">"xxxx"</property> </component>
33.
Spring Framework ● 自前ではJTA対応のトランザクションマネージャ の実装は持っていない ●
JTA対応のトランザクションマネージャをSpring 上で使用するためのアダプタが用意されている ● 2フェーズコミットを使用するにはJavaEEサーバ もしくはスタンドアロンのJTA実装と組み合わせ て使用する必要がある
34.
2フェーズコミットを行う場合は APサーバのトランザクションマネージャを 使ったほうが安全です
35.
まとめ
36.
まとめ ● 2フェーズコミットを行う場合、手動でのリカバリが必要にな るケースが存在するということを意識しておきましょう ● 2フェーズコミットを行う場合はなるべくJavaEEサーバのトラ ンザクションマネージャを使うことをおすすめします ●
そもそも2フェーズコミットを行わなくても済むのであればそ のほうがよいです ● 分散トランザクションはさらに危険がいっぱいなので近づか ないようにしましょうw
37.
おわり
Download