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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

2回答

1848閲覧

RDBのisolation levelと排他制御について

wi2yuki

総合スコア19

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

1クリップ

投稿2019/03/25 10:00

前提・実現したいこと

SprigBootを利用したアプリ開発での、実装規約を作成しています。
その中で、「@Transactional」のパラメータである「isolation」について、どういった場合に何を指定すべき悩んでおります。

発生している問題・エラーメッセージ

アプリケーションの排他制御の設計(楽観的排他制御、悲観的排他制御)と関係してくるかと思うのですが、どういった場合に何を指定すべきか悩んでおります。
「Isolation」でとりうる値は下記5つです。
・DEFAULT
・READ_COMMITTED
・READ_UNCOMMITTED
・REPEATABLE_READ
・SERIALIZABLE
DBにより、defaultの分離レベルが異なるというは認識しております。(READ_COMMITTEDかREPEATABLE_READ)
今まで、DBの分離レベルというのを意識して開発してこなかったので、どうすべきか悩んでおります。

補足情報(FW/ツールのバージョンなど)

SpringBootにて@Transactionalでトランザクション管理をしようとしております。

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

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

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

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

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

guest

回答2

0

トランザクション分離レベルは、パフォーマンス要件とのバランスも考慮されますが、システムとしてデータ参照時にどれだけトランザクション間のズレを許容できるかも検討します。

Isolationについて平易にまとめられた内容
[RDBMS][SQL]トランザクション分離レベルについて極力分かりやすく解説
SQL

Springでの設定
Qiita:Springでトランザクション管理

投稿2019/03/25 15:41

A-pZ

総合スコア12011

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

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

0

ベストアンサー

投稿2019/03/25 10:08

sazi

総合スコア25184

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

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

wi2yuki

2019/03/25 10:12 編集

ご回答ありがとうございますmm それを見ても??って感じでした。。。
sazi

2019/03/25 10:19 編集

質問を見ても何を悩んでいるのかよく分かりません。 トランザクション分離レベルを理解した上で、楽観/悲観的排他を理解する必要があるんですが、同じレベルで考えようとしているように見受けられました。 なので、理解のための情報が不足しているのではないかと思いリンクを貼ったのです。
wi2yuki

2019/03/25 10:22

>トランザクション分離レベルを理解した上で、楽観/悲観的排他を理解する必要があるんですが、同じレベルで考えようとしているように見受けられました。 異なるレベルというのは認識しております。 そのレベルの整理が上手くいかず、悩んでおります。。。 トランザクション分離レベルと楽観・悲観的排他制御の整理と考え方がわからんのです。。。
sazi

2019/03/25 22:08 編集

分かないなら、その分からないところを質問しないと。 トランザクション分離レベルと楽観/悲観排他を切り離してなら、整理はついてるんでしょうか?
wi2yuki

2019/03/26 08:33

>トランザクション分離レベルと楽観/悲観排他を切り離してなら、整理はついてるんでしょうか? 整理ができておらず悩んでいましたが、自分なりに考えた結果、なんとか考えをまとめることができました! 分離レベルを鑑みた上で、業務要件により悲観/楽観排他制御を変更するというのが良さげだという結論にいたりました。 また、分離レベルに関しては、「READ_COMMITED」か「REPEATABLE READ」がほとんどのDB製品でデフォルトであり、それ以外の分離レベルはビジネスレベルでは使用する機会がないと知りました。 「READ_COMMITED」か「REPEATABLE READ」の分離レベルの上で、楽観/悲観排他制御を業務要件で考えていく方針にしました。
sazi

2019/03/26 09:26 編集

READ COMMITED + for update + 楽観的排他 で殆ど事足ります。 for updateを起点となるテーブルを用意(トランザクション単位がレコード)して集中させれば、デッドロックに陥らずに済みます。
wi2yuki

2019/03/26 09:14

ありがとうございます!! 大変勉強になりました(^^;)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問