- vừa được xem lúc

Database Locking là gì? Hãy tưởng tượng bạn đang rút tiền cùng lúc với vợ mình 🏦

0 0 1

Người đăng: Qreative

Theo Viblo Asia

🔐 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:

  1. Cả hai hệ thống cùng thấy còn 1 triệu → cùng rút.
  2. Kết quả: rút được 2 triệu từ một tài khoản 1 triệu 😱
  3. 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?

Bình luận

Bài viết tương tự

- vừa được xem lúc

Mô hình quan hệ - thực thể (Entity – Relationship Model)

Mô hình quan hệ thực thể (Entity Relationship model - E-R) được CHEN giới thiệu vào năm 1976 là một mô hình được sử dụng rộng rãi trong các bản thiết kế cơ sở dữ liệu ở mức khái niệm, được xây dựng dựa trên việc nhận thức thế giới thực thông qua tập các đối tượng được gọi là các thực thể và các mối

0 0 151

- vừa được xem lúc

[Embulk #1] Công cụ giúp giảm nỗi đau chuyển đổi dữ liệu

Embulk là gì. Embulk là một công cụ open source có chức năng cơ bản là load các record từ database này và import sang database khác.

0 0 76

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần II).

Chào mọi người, lại là mình đây, ở phần trước mình đã giới thiệu với mọi người về Window Functions Phần I. Nếu chưa rõ nó là gì thì mọi người nên đọc lại trước nha, để nắm được định nghĩa và các key words, tránh mắt chữ O mồm chứ A vì phần này mình chủ yếu sẽ thực hành với các Window Functions.

0 0 129

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần I).

Chào mọi người, mình mới tìm hiểu đc topic Window Functions cá nhân mình cảm thấy khá là hay và mình đánh giá nó là phần nâng cao. Vì ít người biết nên Window Functions thấy rất ít khi sử dụng, thay vì đó là những câu subquery dài dằng dặc như tin nhắn nhắn cho crush, và người khác đọc hiểu được câu

0 0 999

- vừa được xem lúc

Disable và Enable trigger trong Oracle

Origin post: https://www.tranthanhdeveloper.com/2020/12/disable-va-enable-trigger-trong-oracle.html.

0 0 58

- vừa được xem lúc

Lưu trữ dữ liệu với Data Store

. Data Store là một trong những componet của bộ thư viện Android JetPack, nó là một sự lựa chọn hoàn hảo để thay thế cho SharedPreferences để lưu trữ dữ liệu đơn giản dưới dạng key-value. Chúng ta cùng làm một so sánh nhỏ để thấy sự tối ưu của Data Store với SharedPreferences nhé.

0 0 85