Avatar
0
Nguyễn Thái Sơn Professional
Nguyễn Thái Sơn Professional
về ezydata
Em chào anh, em thấy Ezy data chưa support Non blocking IO, như vậy với 1 ứng dụng thông thường, dù ezyfox server đã non blocking IO nhưng khi connect vẫn bị Blocking IO sẽ khiên toàn bộ là Non blocking IO. Em muốn hỏi có cách nào chuyển hàm từ blocking IO sang Non blocking IO không khi em có dự định dùng cùng ezy data, trong tương lai gần em mong anh hỗ trợ có Non blocking IO ở database
  • Answer
Remain: 5
1 Answer
Avatar
tvd12 Professional
tvd12 Professional
Việc chuyển này cũng có nhiều khó khăn là nó phụ thuộc vào cái driver của database, ví dụ như các driver cho SQL đều cài đặt giao diện của JDBC, mà ông JDBC này thì toàn hàm ở dạng return kết quả nên phải viết ở dạng blocking, đó là vấn đề.

Tuy nhiên Non blocking nó không phải là viên đạn bạc, vì các câu query nó có thời gian timeout mà non-blocking thì xử lý vấn đề timeout này tương đối phức tạp. Nên blocking IO vẫn là giải pháp đơn giản và phù hợp hơn non-blocking IO trong hầu hết các trường hợp.

  • 0
  • Reply
em cảm ơn, vậy mỗi câu truy vấn luôn có timeout, vậy timeout này có phụ thuộc độ dài truy vấn k ạ, ví dụ 1 câu select thông thường và 1 cấu transaction có timeout như nhau không. Em có ý tưởng là mình nên wrap JDBC vào completableFuture để gọi Async để cải thiện hơn nếu không làm được Non blocking IO được không ạ  –  Nguyễn Thái Sơn 1656063101000
  1. Cái này tuỳ vào nghiệp vụ của em mà nên quyết định timeout dài bao nhiêu em ạ.
  2. Việc sử dụng completableFuture không phải là async hoàn toàn, nó chỉ là chuyển việc thực thi sang 1 thread khác, và trong trường hợp hết thread thì mọi truy vấn vẫn phải chờ. Async mà anh muốn nói ở đây là giữa client và server không có sự chờ đợi, client sẽ gửi kết quả đi và server trả kết quả về là luồng khác nhau, sau đó client sử dụng observer design pattern để gọi callback và xử lý kết quả đó em ạ.
 –  monkey 1656101334000