View profile

#164 - Tại sao xác thực thông qua SMS vẫn được sử dụng?

Revue
 
 

Grokking Newsletter

March 28 · Issue #165 · View online

Tuyển tập những bài viết hay cùng sự kiện bổ ích dành cho kĩ sư phần mềm tại Việt Nam.


Những bài viết hay
How GitHub Actions renders large-scale logs
Thiết kế Data Warehouse hiệu quả Thiết kế Data Warehouse hiệu quả
Tại sao xác thực thông qua SMS vẫn được sử dụng Tại sao xác thực thông qua SMS vẫn được sử dụng
Góc Database
Halloween Problem
System R là một trong những hệ thống cơ sở dữ liệu sớm nhất được xây dựng như một dự án nghiên cứu tại phòng thí nghiệm của IBM vào đầu những năm 1970. Với System R, lần đầu tiên SQL được triển khai và từ đó trở thành ngôn ngữ truy vấn dữ liệu quan hệ tiêu chuẩn như chúng ta đã thấy ngày nay.
Vào năm 1976, khi các kỹ sư của IBM đang thử nghiệm một số lý thuyết để xây dựng bộ query optimizer cho SQL thì vô tình phát hiện ra một vấn đề khá thú vị. Vấn đề được mô tả lại như sau.
Cho trước bảng dữ liệu:
Truy vấn sau sẽ thực hiện việc tăng lương 10% cho tất cả nhân viên mà có lương < $25000. 
Các kỹ sư của IBM kỳ vọng kết quả sẽ như bên dưới:
Tuy nhiên, thực tế cuối cùng thu được là tất cả nhân viên đều được nâng lương lên mức ≥ $25000. Tại sao lại như vậy?
Quá trình UPDATE xảy ra qua 3 giai đoạn: (1) tìm kiếm bản ghi phù hợp với điều kiện trong WHERE; (2) tính toán giá trị mới cho trường dữ liệu cần cập nhật; (3) ghi giá trị mới vào database, đồng thời cập nhật index liên quan. Quá trình này thực hiện tuần tự cho từng bản ghi và lặp lại tới khi không còn bản ghi nào thỏa mãn điều kiện WHERE được tìm thấy. 
Hãy chú ý tới index idx_salary, có dạng cấu trúc B-Tree, giúp tăng tốc tìm kiếm bản ghi ở giai đoạn (1). Việc tìm kiếm sẽ duyệt từ bên trái của cây index, các bản ghi có salary nhỏ nhất sẽ được xử lý trước (cụ thể, bản ghi với id=1). Khi đến giai đoạn (3), do giá trị salary đã thay đổi (10000 → 11000) nên vị trí của bản ghi trong index cũng thay đổi theo (di chuyển về bên phải của cây index, nằm phía sau vị trí của bản ghi có id=2). Sau đó, khi xử lý xong quá trình UPDATE cho bản ghi id=2, bản ghi id=1 sẽ lại được UPDATE thêm lần nữa. Quá trình này lặp đi lặp lại khiến giá trị salary của 2 bản ghi được cập nhật nhiều lần cho tới khi giá trị của chúng ≥ $25000 thì dừng.
Trong thực tế, vấn đề này có thể có nhiều cách để xử lý, ví dụ như thay vì cập nhật index sau mỗi lần cập nhật từng bản ghi thì chỉ thực hiện cập nhật index sau khi toàn bộ bản ghi được tính toán và ghi vào database. 
Tuy không phản ánh nội dung liên quan, nhưng vì được phát hiện đúng dịp lễ Halloween nên Halloween Problem trở thành cái tên chính thức được đặt cho vấn đề này.
Bạn đọc có thể tìm hiểu thêm về vấn đề này tại đây và tham khảo loạt bài viết ở đây để rõ hơn về cách mà Microrsoft SQL Server xử lý Halloween Problem.
Code & Tools
This Week Sponsors
Remitano là một trong các sàn giao dịch P2P năng động tại nhiều quốc gia, Remitano cung cấp thị trường uy tín, an toàn tối đa và đơn giản cho hoạt động mua bán tiền mã hóa của hàng triệu khách hàng, với sản phẩm đầu tư đa dạng, giao dịch tức thời và đội ngũ hỗ trợ 24/7 bao gồm các chuyên gia ngân hàng có nhiều kinh nghiệm trong các sản phẩm tài chính, tiền điện tử, và hệ thống thanh toán, đảm bảo mang đến trải nghiệm tốt với mức phí thấp nhất cho người dùng.
Quotes
Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why.“
- Unknown
Did you enjoy this issue?
If you don't want these updates anymore, please unsubscribe here.
If you were forwarded this newsletter and you like it, you can subscribe here.
Powered by Revue
Charmington La Pointe, 181 Cao Thang, Dist 10, Ho Chi Minh city, Viet Nam