Replication
Statement-based replication - side effect like NOW()
Write-ahead log (WAL) shipping
- Undo log
- Redo log
- Undo log
- Redo log
Logical log replication
- MySQL’s binlog
Read your own writes
- read-after-write consistency
- When reading something that the user may have modified, read it from the leader, otherwise read it from a follower.
Monotonic reads
- time will not go backwards
- each user always reads from the same replica
Multi-datacenter operation
Multi-leader replication
- each datacenter’s leader replicates its changes to the leaders in other datacenters.
- dangerous
Handling write conflicts
- last-write-wins
- Record the conflict in an explicit data structure that preserves all information
- Conflict-free replicated data types (CRDTs)
Avoid Infinite replication loops
- each write is tagged with the identifiers of all the replicas it has passed through
Read repair
Anti-entropy process
sloppy quorums and hinted handoff
Traditional SQL
Alter table (add field, rename etc) is implemented by locking the original table, creating a temp table, copying data, making change, then renaming the table.
Traditional SQL
Alter table (add field, rename etc) is implemented by locking the original table, creating a temp table, copying data, making change, then renaming the table.
Internals
How to implement auto increment _id in MongoDB
Use Counters Collection
Optimistic Loop
MySQL
- Lock
How to Use PreparedStatement and Why
PreparedStatement ps = conn.prepareStatement("select a,b from t where c = ?");
ps.setInt(1, I);
ResultSet rs = ps.executeQuery();