1.3.2 Database Consistency Models

Database Consistency Models

Strongly Consistent vs Eventually Consistent

Strongly ConsistentEventually Consistent
DataLuôn mới nhấtCó thể stale (~1s)
RCU cost1 RCU = 4KB0.5 RCU = 4KB (rẻ gấp đôi)
GSI support❌ Không hỗ trợ✅ Default
LSI support✅ Hỗ trợ✅ Default
Cách dùngConsistentRead=trueDefault (không cần set)

Cách hoạt động

Write → Leader node → Replicate to 2 replicas (async)

Eventually Consistent Read: Có thể đọc từ replica chưa cập nhật
Strongly Consistent Read: Luôn đọc từ leader node

Khi nào dùng gì?

ScenarioChọn
Hiển thị product catalogEventually Consistent (rẻ, chấp nhận stale)
Đọc balance sau transactionStrongly Consistent (cần chính xác)
GSI queriesEventually Consistent (bắt buộc)
Real-time inventory countStrongly Consistent

DynamoDB Transactions

  • TransactWriteItems / TransactGetItems
  • ACID transactions across multiple items/tables
  • Cost: 2x WCU/RCU so với standard operations
  • Max 100 items per transaction
import boto3

client = boto3.client('dynamodb')

client.transact_write_items(
    TransactItems=[
        {
            'Update': {
                'TableName': 'Accounts',
                'Key': {'id': {'S': 'acc-1'}},
                'UpdateExpression': 'SET balance = balance - :amount',
                'ExpressionAttributeValues': {':amount': {'N': '100'}}
            }
        },
        {
            'Update': {
                'TableName': 'Accounts',
                'Key': {'id': {'S': 'acc-2'}},
                'UpdateExpression': 'SET balance = balance + :amount',
                'ExpressionAttributeValues': {':amount': {'N': '100'}}
            }
        }
    ]
)

Exam Tip: Eventually Consistent = default, rẻ hơn 50%. Strongly Consistent = ConsistentRead=true, không dùng được với GSI. Transactions = 2x cost nhưng đảm bảo ACID.