🔐 Database Locking là gì? Giữ cửa dữ liệu thế nào cho tử tế!
Bạn đã bao giờ cùng vợ hay người yêu rút tiền cùng một lúc ở 2 cây ATM chưa? Nếu chưa, hãy để database kể cho bạn nghe một bi kịch...
📌 1. Database Locking là gì?
Cơ chế locking (khóa) là cách mà hệ quản trị cơ sở dữ liệu ngăn chặn việc “đụng hàng” giữa các thao tác ghi/xử lý dữ liệu của nhiều người cùng lúc.
Giống như khi bạn đang phát biểu trong cuộc họp – người khác phải chờ bạn nói xong mới được chen vào. Không ai muốn bị chen ngang giữa chừng cả, đúng không?
🧪 2. Vì sao cần khóa? Một cú lừa 1 triệu đồng
Có một tài khoản ngân hàng chung giữa vợ và chồng, trong đó còn đúng 1.000.000 VNĐ.
- Anh chồng rút 1 triệu ở cây ATM A.
- Chị vợ cũng rút 1 triệu ở cây ATM B. Cùng thời điểm.
Nếu không có khóa:
- Cả hai hệ thống cùng thấy còn 1 triệu → cùng rút.
- Kết quả: rút được 2 triệu từ một tài khoản 1 triệu 😱
- Ngân hàng bay màu tiền, còn database thì... chối không biết gì.
=> Đây là lỗi kinh điển gọi là Lost Update – Cập nhật bị mất do ghi đè không kiểm soát.
🛡 3. Cơ chế khóa hoạt động sao?
Giả sử có khóa, kịch bản sẽ như sau:
- 💼 Chồng bắt đầu rút tiền → yêu cầu Exclusive Lock trên dòng dữ liệu tài khoản.
- 🚦 Vợ cũng rút → nhưng phải chờ vì chồng đã giữ khóa.
- ✅ Chồng rút xong → hệ thống cập nhật số dư, rồi thả khóa.
- ❌ Vợ rút → thấy tài khoản hết tiền, hệ thống từ chối.
✨ Kết quả: Dữ liệu chính xác, không có ai rút nhầm.
🧩 4. Có mấy loại khóa?
Loại khóa | Tên gọi khác | Dùng để | Ai được làm gì? |
---|---|---|---|
Shared Lock | Khóa đọc (Read Lock) | Đọc dữ liệu | Nhiều người có thể cùng đọc |
Exclusive Lock | Khóa ghi (Write Lock) | Ghi hoặc xóa dữ liệu | Chỉ 1 người được ghi, người khác phải chờ |
🧱 5. Các cấp độ khóa (Granularity)
Tuỳ tình huống mà hệ thống sẽ khóa ở những “mức” khác nhau:
- 🔹 Row-level lock: Khoá từng dòng. Phổ biến & hiệu quả nhất.
- 📄 Page-level lock: Khoá từng khối lưu trữ (chứa nhiều dòng).
- 📊 Table-level lock: Khoá toàn bộ bảng luôn. Cực kỳ an toàn nhưng dễ nghẽn.
⚠️ 6. Cẩn thận bị “Khóa chết” (Deadlock)
Hai giao dịch chờ nhau nhả khóa mãi mãi – không ai chịu nhường ai.
Đây là Deadlock – cơn ác mộng của hệ thống nhiều người dùng.
Hầu hết DBMS hiện đại sẽ phát hiện và huỷ một bên để “giải cứu con tin”.
🧠 7. Liên hệ OWASP & Security nè
Locking không ngăn hacker như OWASP TOP 10, mà giúp hệ thống:
- ⚖ Giữ dữ liệu đúng đắn & toàn vẹn
- 📚 Tránh lỗi logic race condition
- 🧱 Là lớp bảo vệ nội bộ: chống lại chính người dùng hoặc các process song song.
Nó không phải mã hoá, nhưng lại vô cùng quan trọng trong system design để bạn không tự bắn vào chân mình.
🎯 8. Kết luận: "Gác cổng" thầm lặng nhưng không thể thiếu
Trong thế giới đầy request, API, microservice và autoscale, thì locking giống như bác bảo vệ gác cổng dữ liệu.
Nó không hào nhoáng, không nổi tiếng, nhưng một ngày vắng nó, bạn có thể khóc bằng tiếng Nhật.
🗣 Bạn nghĩ sao? Hệ thống bạn đã khóa dữ liệu đủ chắc chưa? Hay đang... mở cửa đợi bi kịch?