この記事で学んだことをメモる。
Summary
C = consistnecy
A = availability
P = partition tolearance
Strong Consistency が求められる例
深掘りする必要はないが、うまく説明することが必要。
(Does read always have to see the latest write?)
TODO: 以下のstrong consistency が求められる例を簡潔に説明する。(youtube 動画)
Strong Consistency の保証方法
以下に詳しい。
Postgres の場合
- Pessismistic Locking (
SELECT FORin a transaction) - Optimistic Concurrency Control (
UPDATE WHERE version = x+ retry mechanism) - Serializale isolation (
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;+ retry mechanism)
📝 Serializale (実行結果の直列性) は Linearizable (操作の直列性 = 現実時間の順序と一致しているか)の保証を含まない。実際に中で順序待ちのキューができるわけでもない。あたかも直列に実行されたかのように互いに影響を与えないように行われ、もし矛盾が生じればエラーが発生される、ということである。
DynamoDB の場合
DynamoDBはstrong consistencyを保障する。
TODO: どうやって?item100個までだっけ? See my DynamoDB Qiita page?
様々な consistency level
-
Strong Consistency: all reads reflect most recent write -
Causal Consistency: related events appear in order -
Read-your-writes Consistency: user sees their own updates -
Eventual Consistency: updates will propagate eventually