PostgreSQL と Spring Boot でのデータベース分離レベル
データベース管理システムでは、分離とは、トランザクションが同時に実行されている他のトランザクションの影響からどの程度分離されているかを指します。
アプリケーションのニーズに応じて、Spring Boot アプリケーションでさまざまな分離レベルを使用して、PostgreSQL または MySQL データベースにクエリを実行できます。
@Transactionalアノテーションを列挙型と組み合わせることでこれを実現できますIsolation。これにより、トランザクションに必要な分離レベルを指定できます。
このブログでは、私たちが持っているすべてのタイプの分離と、PostgreSQL クエリと Spring Boot を使用してそれを達成する方法について説明します@Transactional annotation.
データベースの分離レベル
- Read Uncommitted :トランザクションは、この分離レベルで別のトランザクションからコミットされていないデータにアクセスできます。これにより、ダーティ リードが発生する可能性があります。データベース レコードを変更するが、トランザクションのコミットまたはロールバックに失敗するトランザクションを考えてみましょう。同じレコードを読み取る別のトランザクションが、コミットされていないデータを取得する可能性があり、結果として矛盾が生じます。
- Read Committed :この分離レベルのトランザクションは、他のトランザクションからコミットされたデータのみを読み取ることができます。データベース レコードを変更し、トランザクションをコミットするトランザクションを考えてみましょう。同じレコードを読み取る後続のトランザクションは、コミットされたデータのみを取得できます。
- Repeatable Read :この分離レベルのトランザクションは、他のトランザクションからコミットされたデータのみを読み取ることができ、コミットされるまで他のトランザクションによって行われた変更は表示されません。データベースからレコードのコレクションを読み取るトランザクションを考えてみましょう。別のトランザクションがレコードを変更または削除した場合でも、最初のトランザクションは、コミットされるまで元のデータを参照し続けます。
- Serializable :トランザクションは、この分離レベルで、順次実行されているように見える方法で実行されます。一方のトランザクションがレコードを変更し、もう一方のトランザクションが同じレコードを削除する 2 つの同時トランザクションを考えてみましょう。トランザクションはこの分離レベルで順次処理され、次のトランザクションが完了するまで 1 つのトランザクションがブロックされます。
注: PostgreSQL のデフォルトの分離レベルは ですREAD COMMITTED。
PostgreSQL で分離レベルを構成する
PostgreSQL では、コマンドを使用して分離レベルを構成できますSET TRANSACTION。これにより、現在のトランザクションの分離レベルを設定できます。手順は次のとおりです。
pgAdmin などのクライアント ツールを使用して、PostgreSQL データベースに接続します。
BEGINまたはを入力してトランザクションを開始しますSTART TRANSACTION.
適切な分離レベルを提供するには、SET TRANSACTIONコマンドを使用します。たとえば、分離レベルを読み取りコミットに変更するには、次のコマンドを実行します。
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
トランザクション内で、データベース アクティビティを実行します。
アクティビティが終了したら、COMMITまたはROLLBACKコマンドを使用して、トランザクションをコミットまたはロールバックします。
分離レベルは、ファイルを使用して Postgresql サーバー全体に対してグローバルに調整することもできることに注意してくださいpostgresql.conf。ただし、トランザクション レベルで分離レベルを設定すると、アプリケーションの一貫性と同時実行性のレベルをより細かく制御できます。
分離レベルをグローバルに変更するには、postgresql.confファイルを開いてパラメータを編集しますtransaction_isolation。このパラメータには次の値を指定できます[serializable, repeatable read, read committed, read uncommitted]。詳細については、このリンクを確認してください。
Spring Boot で分離レベルを構成する
手順は次のとおりです。
@Transactionalアノテーションを使用して、データベース クエリを実行するメソッドにアノテーションを付けます。
@Transactionalアノテーションの分離属性を、必要な量の分離に設定します。たとえば、分離レベルを READ COMMITTED に設定するには、次のコードを使用します。
@Transactional(isolation = Isolation.READ_COMMITTED)
public void performDatabaseQuery() {
// Perform your database query here
}
Spring Boot アプリケーションの DataSource Bean でデフォルトのトランザクション分離レベルを設定します。これは、アプリケーションの構成ファイルに次のコードを含めることで実現できます。
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/mydatabase");
dataSource.setUsername("myusername");
dataSource.setPassword("mypassword");
dataSource.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); // Set default isolation level
return dataSource;
}
これを読んで楽しんだなら、拍手を忘れないでください。
データベースの分離レベルとは何か、およびさまざまな種類の分離でクエリを実行する方法を説明できたことを願っています。
ありがとう。

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































