Dead Lock khi insert đồng thời.
Chào bạn,
Deadlock
xảy ra khi có 1 transaction A chiếm 1 vùng tài nguyên, và cơ sở dữ liệu đang lock
lại vùng tài nguyên đó cho transaction A.
Đồng thời tại thời điểm đó, có transaction B cũng truy xuất cùng vùng tài nguyên này. Để đảm bảo không bị inconsistency thì DB sẽ throw ra deadlock cho B.
Ở ví dụ bạn demo, thì không rơi vào trường hợp đó, nên hiển nhiên không bị throw ra lỗi rồi.
Bạn có thể tái hiện bằng cách insert cùng giá trị ID, hoặc cùng giá trị NAME ở 2 transaction khác nhau. (Tốt nhất transaction A nên có SLEEP time lớn hơn transaction B, để dễ tái hiện)
Giải pháp đồng bộ source code và database mỗi khi deploy?
Mình có tìm hiểu thì biết được 2 cách:
-
Trong version mới của source code, sẽ tương thích với cả 2 version database => ko cần phải migrate database vội, khi toàn bộ instance deploy xong source code mới, thì mới thực hiện migrate db
-
Tách database ra thành 2 version độc lập. (Có thể hiểu là 2 database/ 2 schema riêng). Code mới sẽ cho trỏ vào db mới. Code cũ vẫn trỏ vào db cũ. db mới ban đầu là clone của db cũ Tư tưởng là tạo trigger, khi có CRUD gì với db cũ, thì cũng sẽ CRUD tương tự với db mới. Sau khi deploy xong toàn bộ instance, thì xóa db cũ. -> Cái này đi sâu hơn gọi là kỹ thuật Migrate database
Tổ chức
Chưa có tổ chức nào.