thắc mắc Hỏi ngu về mối liên hệ giữa Client request - Web server - Database

cho em hỏi web server sẽ mở 1 kết nối tới db hay 3 kết nối đến db? Nếu có thể xảy ra cả 2 trường hợp thì thiết kế webapp như thế nào thì mở duy nhất 1 kết nối tới db, như thế nào có thể mở 3 kết nối tương ứng????

Annotation 2020-05-24 202452.png
 
Tùy vào Stack của thím.
Nếu Nginx + PHP thì nó mở 3 process tạo 3 db connection sau nó đóng lại.
Một số framework thì có connection-pool xài đi xài lại db connection

Nhưng mà nói chung k có dùng chung db connection cho cả 3 requests đâu.
Thế nếu em implement singleton cho cái DAL , 3 requests cùng dùng chung 1 cái DAL instance, thì lúc này cái nào mở trước dùng trước, mở sau dùng sau hay là cả 3 cái đều mở 3 kết nối qua 1 instance???
 
Nếu chỉ tại 1 connection thì có vấn đề gì không mấy thím. Em đang dùng flask làm web nhỏ, chỉ mở 1 connection tới db sqlite. Đang test ít request vẫn thấy ok
 
Nếu chỉ tại 1 connection thì có vấn đề gì không mấy thím. Em đang dùng flask làm web nhỏ, chỉ mở 1 connection tới db sqlite. Đang test ít request vẫn thấy ok
Dead lock, có 1 thằng vừa đọc vừa ghi lên 1 table nó chết á.
 
Thế nếu em implement singleton cho cái DAL , 3 requests cùng dùng chung 1 cái DAL instance, thì lúc này cái nào mở trước dùng trước, mở sau dùng sau hay là cả 3 cái đều mở 3 kết nối qua 1 instance???

Tùy theo các yếu tố:
- ISP: nhiều hay một. Một thì lần lượt, nhiều thì song song đc.
- Mạng: 1 hay nhiều LAN, 3 req trên 1 lan thì packed vào lần lượt, 3 req khác LAN thì có thể song song đầu vào.
- CPU: số core mà CPU có
- Http Controller (tạm gọi, vì mỗi framework có cách gọi riêng) của ông có hỗ trợ nhiều core ko,ko thì vẫn lần lượt, có thì đồng thời đc.
- DB: có hỗ trợ nhiều core ko, ko thì vẫn lần lượt, có thì đồng thời đc.

Cái DAL instance của ông như mẫu Factory thôi, nhiệm vụ là produce ra các connection. Còn establish conneation là do client/driver của DB nó tạo.

Còn ông cài đặt cái DAL ông sao để nó "cái nào mở trước dùng trước, mở sau dùng sau hay là cả 3 cái đều mở 3 kết nối" là do ông ko phải do mấy cái tui nêu nữa rồi.

Sent using vozFApp
 
Last edited:
Thế nếu em implement singleton cho cái DAL , 3 requests cùng dùng chung 1 cái DAL instance, thì lúc này cái nào mở trước dùng trước, mở sau dùng sau hay là cả 3 cái đều mở 3 kết nối qua 1 instance???

Ko ai làm như vậy cả. Read write bình thường có thể ko sao, nhưng transaction sẽ lỗi. 1 thằng mở transaction thì cả 3 thằng cùng làm trên đó, 1 thằng lỗi rollback cả 3 thằng mất dữ liệu.
 
Back
Top