sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL行読み取りロック

    これは、トランザクション分離のプロパティです。それについて書かれたものはたくさんあり、データ集約型の設計で概要を強くお勧めしますアプリケーション 。個人的な理解を深めるのに最も役立つ説明だと思いました。

    デフォルトのpostgresレベルは READCOMMITTED です。 これにより、これらの同時トランザクションのそれぞれは、依存している必要がある場合でも、類似した(資金が利用可能な状態)を確認できます。

    これに対処する1つの方法は、これらの各トランザクションを"SERIALIZABLE"整合性としてマークすることです。

    これにより、可用性を犠牲にしてアプリケーションの正確性が強化されます。つまり、この場合、2番目のトランザクションはレコードの変更を許可されず、拒否され、再試行が必要になります。 POCまたはトラフィックの少ないアプリケーションの場合、現時点で正確性を確保できるため、これは通常、完全に許容できる最初のステップです。

    また、上記の本には、ATMが可用性を処理する方法の例があったと思います。これらは、この競合状態を許容し、中央バンクに接続できない場合にユーザーがオーバードローすることを許可しますが、最大引き出しを制限して爆風半径を最小化します!

    これに対処するもう1つのアーキテクチャ上の方法は、トランザクションをオフラインにして非同期にすることです。これにより、ユーザーが呼び出した各トランザクションがキューに公開され、キューの単一のコンシューマーを持つことで、競合状態を自然に回避できます。ここでのトレードオフは、1人のワーカーから利用できる固定スループットがあることと似ていますが、現時点での正確性の問題に対処するのに役立ちます:P

    分散ロックと呼ばれるマシン間でのロック(postgres / grpc全体でのredisの使用など)には、かなりの量が書かれています https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html




    1. UNIONから一時テーブルを作成する際に問題が発生する

    2. このクエリにインデックスが使用されないのはなぜですか?

    3. MySQLでのmemcacheはどのように機能しますか?

    4. mysqlに保存されているとおりにコンテンツを表示する方法